{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Python基础"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 1. Python 常用数据结构\n",
    "### 1.1 数字"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1"
      ]
     },
     "execution_count": 1,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = 1\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0.02"
      ]
     },
     "execution_count": 2,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "b = 0.02\n",
    "b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.2 字符串"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'hello world'"
      ]
     },
     "execution_count": 3,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = 'hello world'\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'hello world'"
      ]
     },
     "execution_count": 4,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = \"hello world\"\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'hello world'"
      ]
     },
     "execution_count": 5,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = 'hello' + ' world'\n",
    "s"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "字符串索引:"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'h'"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s[0]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'d'"
      ]
     },
     "execution_count": 7,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s[-1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "'hello'"
      ]
     },
     "execution_count": 8,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s[0:5]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.3 列表 List"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2.0, 'hello', 6.0]"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = [1, 2.0, 'hello', 5 + 1.0]\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2.0, 'hello', 6.0, 1, 2.0, 'hello', 6.0]"
      ]
     },
     "execution_count": 10,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2.0"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[1]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "4"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "len(a)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "[1, 2.0, 'hello', 6.0, 'world']"
      ]
     },
     "execution_count": 13,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.append('world')\n",
    "a"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.4 集合 Set"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{2, 3, 4}"
      ]
     },
     "execution_count": 14,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = {2, 3, 4, 2}\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{2, 3, 4}"
      ]
     },
     "execution_count": 15,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a = {1, 2, 3, 4}\n",
    "b = {2, 3, 4, 5}\n",
    "a & b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 16,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1, 2, 3, 4, 5}"
      ]
     },
     "execution_count": 16,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a | b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 17,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1}"
      ]
     },
     "execution_count": 17,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a - b"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 18,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{1, 5}"
      ]
     },
     "execution_count": 18,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a ^ b"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.5 字典 Dictionary "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 19,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'dogs': 5, 'cats': 4}"
      ]
     },
     "execution_count": 19,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d = {'dogs':5, 'cats':4}\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 20,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "5"
      ]
     },
     "execution_count": 20,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d[\"dogs\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 21,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'dogs': 2, 'cats': 4}"
      ]
     },
     "execution_count": 21,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d[\"dogs\"] = 2\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 22,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "{'dogs': 2, 'cats': 4, 'pigs': 7}"
      ]
     },
     "execution_count": 22,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d[\"pigs\"] = 7\n",
    "d"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 23,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_keys(['dogs', 'cats', 'pigs'])"
      ]
     },
     "execution_count": 23,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.keys()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 24,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_values([2, 4, 7])"
      ]
     },
     "execution_count": 24,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.values()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 25,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "dict_items([('dogs', 2), ('cats', 4), ('pigs', 7)])"
      ]
     },
     "execution_count": 25,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "d.items()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.6 数组 Numpy Arrays"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "Numpy数组可以进行很多列表不能进行的运算"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 26,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([1, 2, 3, 4])"
      ]
     },
     "execution_count": 26,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from numpy import array\n",
    "a = array([1, 2, 3, 4])\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 27,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([3, 4, 5, 6])"
      ]
     },
     "execution_count": 27,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + 2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 28,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([2, 4, 6, 8])"
      ]
     },
     "execution_count": 28,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a + a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 29,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([ 1,  4,  9, 16])"
      ]
     },
     "execution_count": 29,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a * a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 30,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([  1,   4,  27, 256], dtype=int32)"
      ]
     },
     "execution_count": 30,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a ** a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 31,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([4, 6])"
      ]
     },
     "execution_count": 31,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a[:2] + a[-2:]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 32,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "(4,)"
      ]
     },
     "execution_count": 32,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.shape"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 33,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[1, 2],\n",
       "       [3, 4]])"
      ]
     },
     "execution_count": 33,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.shape = 2,2\n",
    "a"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 34,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2"
      ]
     },
     "execution_count": 34,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "a.ndim"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.7 Pandas一维数据结构：Series"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 35,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import pandas as pd"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Series` 是一维带标记的数组结构，可以存储任意类型的数据（整数，浮点数，字符串，`Python` 对象等等）。\n",
    "\n",
    "作为一维结构，它的索引叫做 `index`，基本调用方法为\n",
    "\n",
    "    s = pd.Series(data, index=index)\n",
    "    \n",
    "其中，`data` 可以是以下结构：\n",
    "\n",
    "- 字典\n",
    "- `ndarray`\n",
    "- 标量，例如 `5`\n",
    "\n",
    "`index` 是一维坐标轴的索引列表。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果 `data` 是个 `ndarray`，那么 `index` 的长度必须跟 `data` 一致："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 36,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a   -0.391071\n",
       "b   -0.297148\n",
       "c    0.891443\n",
       "d    0.131647\n",
       "e   -2.088058\n",
       "dtype: float64"
      ]
     },
     "execution_count": 36,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = pd.Series(np.random.randn(5), index=[\"a\", \"b\", \"c\", \"d\", \"e\"])\n",
    "\n",
    "s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 37,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0   -0.699289\n",
       "1    0.129665\n",
       "2    1.024578\n",
       "3    0.020544\n",
       "4   -0.579999\n",
       "dtype: float64"
      ]
     },
     "execution_count": 37,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.Series(np.random.randn(5))"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 向量化操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "简单的向量操作与 `ndarray` 的表现一致："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 38,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a   -0.782142\n",
       "b   -0.594295\n",
       "c    1.782887\n",
       "d    0.263294\n",
       "e   -4.176116\n",
       "dtype: float64"
      ]
     },
     "execution_count": 38,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s + s"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 39,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a   -0.782142\n",
       "b   -0.594295\n",
       "c    1.782887\n",
       "d    0.263294\n",
       "e   -4.176116\n",
       "dtype: float64"
      ]
     },
     "execution_count": 39,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s * 2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "但 `Series` 和 `ndarray` 不同的地方在于，`Series` 的操作默认是使用 `index` 的值进行对齐的，而不是相对位置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 40,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a         NaN\n",
       "b   -0.594295\n",
       "c    1.782887\n",
       "d    0.263294\n",
       "e         NaN\n",
       "dtype: float64"
      ]
     },
     "execution_count": 40,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s[1:] + s[:-1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "对于上面两个不能完全对齐的 `Series`，结果的 `index` 是两者 `index` 的并集，同时不能对齐的部分当作缺失值处理。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 1.8 Pandas二维数据结构：DataFrame"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`DataFrame` 是 `pandas` 中的二维数据结构，可以看成一个 `Excel` 中的工作表，或者一个 `SQL` 表，或者一个存储 `Series` 对象的字典。\n",
    "\n",
    "`DataFrame(data, index, columns)` 中的 `data` 可以接受很多数据类型：\n",
    "\n",
    "- 一个存储一维数组，字典，列表或者 `Series` 的字典\n",
    "- 2-D 数组\n",
    "- 结构或者记录数组\n",
    "- 一个 `Series`\n",
    "- 另一个 `DataFrame`\n",
    "\n",
    "`index` 用于指定行的 `label`，`columns` 用于指定列的 `label`，如果参数不传入，那么会按照传入的内容进行设定。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 从 Series 字典中构造"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 41,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "d = {'one' : pd.Series([1., 2., 3.], index=['a', 'b', 'c']),\n",
    "     'two' : pd.Series([1., 2., 3., 4.], index=['a', 'b', 'c', 'd'])}"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果没有传入 `columns` 的值，那么 `columns` 的值默认为字典 `key`，`index` 默认为所有 `value` 中 `index` 的并集。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 42,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>NaN</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   one  two\n",
       "a  1.0  1.0\n",
       "b  2.0  2.0\n",
       "c  3.0  3.0\n",
       "d  NaN  4.0"
      ]
     },
     "execution_count": 42,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(d)\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果指定了 `index` 值，`index` 为指定的 `index` 值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 43,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>NaN</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   one  two\n",
       "d  NaN  4.0\n",
       "b  2.0  2.0\n",
       "a  1.0  1.0"
      ]
     },
     "execution_count": 43,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(d, index=['d', 'b', 'a'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "如果指定了 `columns` 值，会去字典中寻找，找不到的值为 `NaN`："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 44,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>two</th>\n",
       "      <th>three</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>4.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   two three\n",
       "d  4.0   NaN\n",
       "b  2.0   NaN\n",
       "a  1.0   NaN"
      ]
     },
     "execution_count": 44,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.DataFrame(d, index=['d', 'b', 'a'], columns=['two', 'three'])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 45,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['a', 'b', 'c', 'd'], dtype='object')"
      ]
     },
     "execution_count": 45,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 46,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['one', 'two'], dtype='object')"
      ]
     },
     "execution_count": 46,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 列操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`DataFrame` 可以类似于字典一样对列进行操作："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 47,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "a    1.0\n",
       "b    2.0\n",
       "c    3.0\n",
       "d    NaN\n",
       "Name: one, dtype: float64"
      ]
     },
     "execution_count": 47,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"one\"]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 48,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "      <th>three</th>\n",
       "      <th>flag</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>a</th>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>b</th>\n",
       "      <td>2.0</td>\n",
       "      <td>2.0</td>\n",
       "      <td>4.0</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>c</th>\n",
       "      <td>3.0</td>\n",
       "      <td>3.0</td>\n",
       "      <td>9.0</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>d</th>\n",
       "      <td>NaN</td>\n",
       "      <td>4.0</td>\n",
       "      <td>NaN</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   one  two  three   flag\n",
       "a  1.0  1.0    1.0  False\n",
       "b  2.0  2.0    4.0  False\n",
       "c  3.0  3.0    9.0   True\n",
       "d  NaN  4.0    NaN  False"
      ]
     },
     "execution_count": 48,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['three'] = df['one'] * df['two']\n",
    "\n",
    "df['flag'] = df['one'] > 2\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "#### 索引和选择"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "基本操作：\n",
    "\n",
    "| Operation\t| Syntax | Result |\n",
    "| ---- | ----- | ---- |\n",
    "| Select column\t| df[col] | Series |\n",
    "| Select row by label | df.loc[label] | Series |\n",
    "| Select row by integer location | df.iloc[loc] | Series |\n",
    "| Slice rows | df[5:10]\t| DataFrame |\n",
    "| Select rows by boolean vector\t| df[bool_vec] | DataFrame |"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 2. Pandas 10分钟介绍"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 50,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "%matplotlib inline\n",
    "\n",
    "import pandas as pd\n",
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 2.1 产生Pandas对象"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`pandas` 中有三种基本结构：\n",
    "\n",
    "- `Series`\n",
    "    - 1D labeled homogeneously-typed array\n",
    "- `DataFrame`\n",
    "    - General 2D labeled, size-mutable tabular structure with potentially heterogeneously-typed columns\n",
    "- `Panel`\n",
    "    - General 3D labeled, also size-mutable array"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Series"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "一维 `Series` 可以用一维列表初始化："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 51,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    1.0\n",
      "1    3.0\n",
      "2    5.0\n",
      "3    NaN\n",
      "4    6.0\n",
      "5    8.0\n",
      "dtype: float64\n"
     ]
    }
   ],
   "source": [
    "s = pd.Series([1,3,5,np.nan,6,8])\n",
    "\n",
    "print(s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "默认情况下，`Series` 的下标都是数字（可以使用额外参数指定），类型是统一的。\n",
    "\n",
    "### DataFrame\n",
    "\n",
    "`DataFrame` 则是个二维结构，这里首先构造一组时间序列，作为我们第一维的下标："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 52,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',\n",
      "               '2013-01-05', '2013-01-06'],\n",
      "              dtype='datetime64[ns]', freq='D')\n"
     ]
    }
   ],
   "source": [
    "dates = pd.date_range('20130101', periods=6)\n",
    "\n",
    "print(dates)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "然后创建一个 `DataFrame` 结构："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 54,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723"
      ]
     },
     "execution_count": 54,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(6,4), index=dates, columns=list('ABCD'))\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "默认情况下，如果不指定 `index` 参数和 `columns`，那么他们的值将用从 `0` 开始的数字替代。\n",
    "\n",
    "除了向 `DataFrame` 中传入二维数组，我们也可以使用字典传入数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 55,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>test</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>train</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>test</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.0</td>\n",
       "      <td>2013-01-02</td>\n",
       "      <td>1.0</td>\n",
       "      <td>3</td>\n",
       "      <td>train</td>\n",
       "      <td>foo</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A          B    C  D      E    F\n",
       "0  1.0 2013-01-02  1.0  3   test  foo\n",
       "1  1.0 2013-01-02  1.0  3  train  foo\n",
       "2  1.0 2013-01-02  1.0  3   test  foo\n",
       "3  1.0 2013-01-02  1.0  3  train  foo"
      ]
     },
     "execution_count": 55,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = pd.DataFrame({'A' : 1.,\n",
    "                    'B' : pd.Timestamp('20130102'),\n",
    "                    'C' : pd.Series(1,index=list(range(4)),dtype='float32'),\n",
    "                    'D' : np.array([3] * 4,dtype='int32'),\n",
    "                    'E' : pd.Categorical([\"test\",\"train\",\"test\",\"train\"]),\n",
    "                    'F' : 'foo' })\n",
    "\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "字典的每个 `key` 代表一列，其 `value` 可以是各种能够转化为 `Series` 的对象。\n",
    "\n",
    "与 `Series` 要求所有的类型都一致不同，`DataFrame` 值要求每一列数据的格式相同："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 56,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A           float64\n",
       "B    datetime64[ns]\n",
       "C           float32\n",
       "D             int32\n",
       "E          category\n",
       "F            object\n",
       "dtype: object"
      ]
     },
     "execution_count": 56,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2.dtypes"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 查看数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 头尾数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`head` 和 `tail` 方法可以分别查看最前面几行和最后面几行的数据（默认为 5）："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 57,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465"
      ]
     },
     "execution_count": 57,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "最后 3 行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 58,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723"
      ]
     },
     "execution_count": 58,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.tail(3)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 下标，列标，数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "下标使用 `index` 属性查看："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 59,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "DatetimeIndex(['2013-01-01', '2013-01-02', '2013-01-03', '2013-01-04',\n",
       "               '2013-01-05', '2013-01-06'],\n",
       "              dtype='datetime64[ns]', freq='D')"
      ]
     },
     "execution_count": 59,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.index"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "列标使用 `columns` 属性查看："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 60,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "Index(['A', 'B', 'C', 'D'], dtype='object')"
      ]
     },
     "execution_count": 60,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.columns"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据值使用 `values` 查看："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 61,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 0.93083159,  1.38817188,  0.52607303, -0.92986546],\n",
       "       [-1.08350164,  1.23603628,  0.24401215,  1.78770527],\n",
       "       [-0.68662927,  0.27973477,  0.25896899, -0.95747843],\n",
       "       [ 0.27012633,  1.09727645,  0.81266068,  1.04236076],\n",
       "       [-1.43806987,  0.19938819, -0.97215209,  1.01446525],\n",
       "       [ 0.14298801, -0.49527868,  1.18734858,  1.5397225 ]])"
      ]
     },
     "execution_count": 61,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.values"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 统计数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "查看简单的统计数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 62,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>count</th>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "      <td>6.000000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>mean</th>\n",
       "      <td>-0.310709</td>\n",
       "      <td>0.617555</td>\n",
       "      <td>0.342819</td>\n",
       "      <td>0.582818</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>std</th>\n",
       "      <td>0.904887</td>\n",
       "      <td>0.739444</td>\n",
       "      <td>0.736683</td>\n",
       "      <td>1.218659</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>min</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>25%</th>\n",
       "      <td>-0.984284</td>\n",
       "      <td>0.219475</td>\n",
       "      <td>0.247751</td>\n",
       "      <td>-0.443783</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>50%</th>\n",
       "      <td>-0.271821</td>\n",
       "      <td>0.688506</td>\n",
       "      <td>0.392521</td>\n",
       "      <td>1.028413</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>75%</th>\n",
       "      <td>0.238342</td>\n",
       "      <td>1.201346</td>\n",
       "      <td>0.741014</td>\n",
       "      <td>1.415382</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>max</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "              A         B         C         D\n",
       "count  6.000000  6.000000  6.000000  6.000000\n",
       "mean  -0.310709  0.617555  0.342819  0.582818\n",
       "std    0.904887  0.739444  0.736683  1.218659\n",
       "min   -1.438070 -0.495279 -0.972152 -0.957478\n",
       "25%   -0.984284  0.219475  0.247751 -0.443783\n",
       "50%   -0.271821  0.688506  0.392521  1.028413\n",
       "75%    0.238342  1.201346  0.741014  1.415382\n",
       "max    0.930832  1.388172  1.187349  1.787705"
      ]
     },
     "execution_count": 62,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.describe()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 转置"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 64,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>2013-01-01 00:00:00</th>\n",
       "      <th>2013-01-02 00:00:00</th>\n",
       "      <th>2013-01-03 00:00:00</th>\n",
       "      <th>2013-01-04 00:00:00</th>\n",
       "      <th>2013-01-05 00:00:00</th>\n",
       "      <th>2013-01-06 00:00:00</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>-1.083502</td>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.270126</td>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.142988</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>1.388172</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.495279</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>C</th>\n",
       "      <td>0.526073</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.187349</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>D</th>\n",
       "      <td>-0.929865</td>\n",
       "      <td>1.787705</td>\n",
       "      <td>-0.957478</td>\n",
       "      <td>1.042361</td>\n",
       "      <td>1.014465</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   2013-01-01  2013-01-02  2013-01-03  2013-01-04  2013-01-05  2013-01-06\n",
       "A    0.930832   -1.083502   -0.686629    0.270126   -1.438070    0.142988\n",
       "B    1.388172    1.236036    0.279735    1.097276    0.199388   -0.495279\n",
       "C    0.526073    0.244012    0.258969    0.812661   -0.972152    1.187349\n",
       "D   -0.929865    1.787705   -0.957478    1.042361    1.014465    1.539723"
      ]
     },
     "execution_count": 64,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.T"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 排序"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`sort_index(axis=0, ascending=True)` 方法按照下标大小进行排序，`axis=0` 表示按第 0 维进行排序。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 66,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865"
      ]
     },
     "execution_count": 66,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_index(ascending=False)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 68,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>D</th>\n",
       "      <th>C</th>\n",
       "      <th>B</th>\n",
       "      <th>A</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>-0.929865</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.930832</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>1.787705</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>-1.083502</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.957478</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>-0.686629</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>1.042361</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.270126</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>1.014465</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-1.438070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>1.539723</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>0.142988</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   D         C         B         A\n",
       "2013-01-01 -0.929865  0.526073  1.388172  0.930832\n",
       "2013-01-02  1.787705  0.244012  1.236036 -1.083502\n",
       "2013-01-03 -0.957478  0.258969  0.279735 -0.686629\n",
       "2013-01-04  1.042361  0.812661  1.097276  0.270126\n",
       "2013-01-05  1.014465 -0.972152  0.199388 -1.438070\n",
       "2013-01-06  1.539723  1.187349 -0.495279  0.142988"
      ]
     },
     "execution_count": 68,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_index(axis=1, ascending=False)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`sort_values(by, axis=0, ascending=True)` 方法按照 `by` 的值的大小进行排序，例如按照 `B` 列的大小："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 70,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865"
      ]
     },
     "execution_count": 70,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sort_values(by=\"B\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "虽然 `DataFrame` 支持 `Python/Numpy` 的索引语法，但是推荐使用 `.at, .iat, .loc, .iloc 和 .ix` 方法进行索引。"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 读取数据"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "选择单列数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 72,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01    0.930832\n",
       "2013-01-02   -1.083502\n",
       "2013-01-03   -0.686629\n",
       "2013-01-04    0.270126\n",
       "2013-01-05   -1.438070\n",
       "2013-01-06    0.142988\n",
       "Freq: D, Name: A, dtype: float64"
      ]
     },
     "execution_count": 72,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"A\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "也可以用 `df.A`："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 73,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01    0.930832\n",
       "2013-01-02   -1.083502\n",
       "2013-01-03   -0.686629\n",
       "2013-01-04    0.270126\n",
       "2013-01-05   -1.438070\n",
       "2013-01-06    0.142988\n",
       "Freq: D, Name: A, dtype: float64"
      ]
     },
     "execution_count": 73,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.A"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用切片读取多行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 74,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478"
      ]
     },
     "execution_count": 74,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[0:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`index` 名字也可以进行切片："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 75,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478"
      ]
     },
     "execution_count": 75,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"20130101\":\"20130103\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用 `label` 索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`loc` 可以方便的使用 `label` 进行索引："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 76,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    0.930832\n",
       "B    1.388172\n",
       "C    0.526073\n",
       "D   -0.929865\n",
       "Name: 2013-01-01 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 76,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[0]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "多列数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 77,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-01  0.930832  1.388172\n",
       "2013-01-02 -1.083502  1.236036\n",
       "2013-01-03 -0.686629  0.279735\n",
       "2013-01-04  0.270126  1.097276\n",
       "2013-01-05 -1.438070  0.199388\n",
       "2013-01-06  0.142988 -0.495279"
      ]
     },
     "execution_count": 77,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,['A','B']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "选择多行多列："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 78,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-02 -1.083502  1.236036\n",
       "2013-01-03 -0.686629  0.279735\n",
       "2013-01-04  0.270126  1.097276"
      ]
     },
     "execution_count": 78,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['20130102':'20130104',['A','B']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "数据降维："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 79,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -1.083502\n",
       "B    1.236036\n",
       "Name: 2013-01-02 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 79,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc['20130102',['A','B']]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "得到标量值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 80,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.3881718842189799"
      ]
     },
     "execution_count": 80,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[dates[0],'B']"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "不过得到标量值可以用 `at`，速度更快："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 81,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "12.1 µs ± 1.22 µs per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "8.97 µs ± 464 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "1.3881718842189799\n"
     ]
    }
   ],
   "source": [
    "%timeit -n100 df.loc[dates[0],'B']\n",
    "%timeit -n100 df.at[dates[0],'B']\n",
    "\n",
    "print(df.at[dates[0],'B'])"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 使用位置索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`iloc` 使用位置进行索引："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 82,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    0.270126\n",
       "B    1.097276\n",
       "C    0.812661\n",
       "D    1.042361\n",
       "Name: 2013-01-04 00:00:00, dtype: float64"
      ]
     },
     "execution_count": 82,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "连续切片："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 83,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B\n",
       "2013-01-04  0.270126  1.097276\n",
       "2013-01-05 -1.438070  0.199388"
      ]
     },
     "execution_count": 83,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[3:5,0:2]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "索引不连续的部分："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 84,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>C</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>0.244012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.258969</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>-0.972152</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         C\n",
       "2013-01-02 -1.083502  0.244012\n",
       "2013-01-03 -0.686629  0.258969\n",
       "2013-01-05 -1.438070 -0.972152"
      ]
     },
     "execution_count": 84,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[[1,2,4],[0,2]]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "索引整行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 85,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478"
      ]
     },
     "execution_count": 85,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1:3,:]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "整列："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 86,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   B         C\n",
       "2013-01-01  1.388172  0.526073\n",
       "2013-01-02  1.236036  0.244012\n",
       "2013-01-03  0.279735  0.258969\n",
       "2013-01-04  1.097276  0.812661\n",
       "2013-01-05  0.199388 -0.972152\n",
       "2013-01-06 -0.495279  1.187349"
      ]
     },
     "execution_count": 86,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[:, 1:3]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "标量值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 87,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "1.236036280497105"
      ]
     },
     "execution_count": 87,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iloc[1,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当然，使用 `iat` 索引标量值更快："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 89,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "6.68 µs ± 428 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)\n",
      "3.87 µs ± 244 ns per loop (mean ± std. dev. of 7 runs, 100 loops each)\n"
     ]
    },
    {
     "data": {
      "text/plain": [
       "1.236036280497105"
      ]
     },
     "execution_count": 89,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "%timeit -n100 df.iloc[1,1]\n",
    "%timeit -n100 df.iat[1,1]\n",
    "\n",
    "df.iat[1,1]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 布尔型索引"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "所有 `A` 列大于 0 的行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 90,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723"
      ]
     },
     "execution_count": 90,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df.A > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "只留下所有大于 0 的数值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 91,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>NaN</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.014465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D\n",
       "2013-01-01  0.930832  1.388172  0.526073       NaN\n",
       "2013-01-02       NaN  1.236036  0.244012  1.787705\n",
       "2013-01-03       NaN  0.279735  0.258969       NaN\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361\n",
       "2013-01-05       NaN  0.199388       NaN  1.014465\n",
       "2013-01-06  0.142988       NaN  1.187349  1.539723"
      ]
     },
     "execution_count": 91,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[df > 0]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 `isin` 方法做 `filter` 过滤："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 92,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "      <td>one</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "      <td>three</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D      E\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865    one\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705    one\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478    two\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361  three\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465   four\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723  three"
      ]
     },
     "execution_count": 92,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df.copy()\n",
    "df2['E'] = ['one', 'one','two','three','four','three']\n",
    "\n",
    "df2"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 93,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "      <td>two</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "      <td>four</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D     E\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478   two\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465  four"
      ]
     },
     "execution_count": 93,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2[df2['E'].isin(['two','four'])]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 设定数据的值"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 94,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-02    1\n",
       "2013-01-03    2\n",
       "2013-01-04    3\n",
       "2013-01-05    4\n",
       "2013-01-06    5\n",
       "2013-01-07    6\n",
       "Freq: D, dtype: int64"
      ]
     },
     "execution_count": 94,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s1 = pd.Series([1,2,3,4,5,6], index=pd.date_range('20130102', periods=6))\n",
    "\n",
    "s1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "像字典一样，直接指定 `F` 列的值为 `s1`，此时以 `df` 已有的 `index` 为标准将二者进行合并，`s1` 中没有的 `index` 项设为 `NaN`，多余的项舍去："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 95,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.930832</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D    F\n",
       "2013-01-01  0.930832  1.388172  0.526073 -0.929865  NaN\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705  1.0\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478  2.0\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361  3.0\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465  4.0\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723  5.0"
      ]
     },
     "execution_count": 95,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['F'] = s1\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "或者使用 `at` 或 `iat` 修改单个值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 96,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>1.388172</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D    F\n",
       "2013-01-01  0.000000  1.388172  0.526073 -0.929865  NaN\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705  1.0\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478  2.0\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361  3.0\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465  4.0\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723  5.0"
      ]
     },
     "execution_count": 96,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.at[dates[0],'A'] = 0\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 97,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>-0.929865</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>1.787705</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>-0.957478</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>1.042361</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>1.014465</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>1.539723</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C         D    F\n",
       "2013-01-01  0.000000  0.000000  0.526073 -0.929865  NaN\n",
       "2013-01-02 -1.083502  1.236036  0.244012  1.787705  1.0\n",
       "2013-01-03 -0.686629  0.279735  0.258969 -0.957478  2.0\n",
       "2013-01-04  0.270126  1.097276  0.812661  1.042361  3.0\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  1.014465  4.0\n",
       "2013-01-06  0.142988 -0.495279  1.187349  1.539723  5.0"
      ]
     },
     "execution_count": 97,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.iat[0, 1] = 0\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "设定一整列："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 98,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>5</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>5</td>\n",
       "      <td>4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>1.187349</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F\n",
       "2013-01-01  0.000000  0.000000  0.526073  5  NaN\n",
       "2013-01-02 -1.083502  1.236036  0.244012  5  1.0\n",
       "2013-01-03 -0.686629  0.279735  0.258969  5  2.0\n",
       "2013-01-04  0.270126  1.097276  0.812661  5  3.0\n",
       "2013-01-05 -1.438070  0.199388 -0.972152  5  4.0\n",
       "2013-01-06  0.142988 -0.495279  1.187349  5  5.0"
      ]
     },
     "execution_count": 98,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.loc[:,'D'] = np.array([5] * len(df))\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "设定满足条件的数值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 99,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>-0.526073</td>\n",
       "      <td>-5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>-1.236036</td>\n",
       "      <td>-0.244012</td>\n",
       "      <td>-5</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>-0.279735</td>\n",
       "      <td>-0.258969</td>\n",
       "      <td>-5</td>\n",
       "      <td>-2.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-0.270126</td>\n",
       "      <td>-1.097276</td>\n",
       "      <td>-0.812661</td>\n",
       "      <td>-5</td>\n",
       "      <td>-3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-1.438070</td>\n",
       "      <td>-0.199388</td>\n",
       "      <td>-0.972152</td>\n",
       "      <td>-5</td>\n",
       "      <td>-4.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-0.142988</td>\n",
       "      <td>-0.495279</td>\n",
       "      <td>-1.187349</td>\n",
       "      <td>-5</td>\n",
       "      <td>-5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F\n",
       "2013-01-01  0.000000  0.000000 -0.526073 -5  NaN\n",
       "2013-01-02 -1.083502 -1.236036 -0.244012 -5 -1.0\n",
       "2013-01-03 -0.686629 -0.279735 -0.258969 -5 -2.0\n",
       "2013-01-04 -0.270126 -1.097276 -0.812661 -5 -3.0\n",
       "2013-01-05 -1.438070 -0.199388 -0.972152 -5 -4.0\n",
       "2013-01-06 -0.142988 -0.495279 -1.187349 -5 -5.0"
      ]
     },
     "execution_count": 99,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df.copy()\n",
    "\n",
    "df2[df2 > 0] = -df2\n",
    "\n",
    "df2"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 缺失数据"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 100,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F    E\n",
       "2013-01-01  0.000000  0.000000  0.526073  5  NaN  1.0\n",
       "2013-01-02 -1.083502  1.236036  0.244012  5  1.0  1.0\n",
       "2013-01-03 -0.686629  0.279735  0.258969  5  2.0  NaN\n",
       "2013-01-04  0.270126  1.097276  0.812661  5  3.0  NaN"
      ]
     },
     "execution_count": 100,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1 = df.reindex(index=dates[0:4], columns=list(df.columns) + ['E'])\n",
    "df1.loc[dates[0]:dates[1],'E'] = 1\n",
    "\n",
    "df1"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "丢弃所有缺失数据的行得到的新数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 101,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F    E\n",
       "2013-01-02 -1.083502  1.236036  0.244012  5  1.0  1.0"
      ]
     },
     "execution_count": 101,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.dropna(how='any')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "填充缺失数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 102,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>5</td>\n",
       "      <td>5.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.244012</td>\n",
       "      <td>5</td>\n",
       "      <td>1.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-0.686629</td>\n",
       "      <td>0.279735</td>\n",
       "      <td>0.258969</td>\n",
       "      <td>5</td>\n",
       "      <td>2.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>0.270126</td>\n",
       "      <td>1.097276</td>\n",
       "      <td>0.812661</td>\n",
       "      <td>5</td>\n",
       "      <td>3.0</td>\n",
       "      <td>5.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C  D    F    E\n",
       "2013-01-01  0.000000  0.000000  0.526073  5  5.0  1.0\n",
       "2013-01-02 -1.083502  1.236036  0.244012  5  1.0  1.0\n",
       "2013-01-03 -0.686629  0.279735  0.258969  5  2.0  5.0\n",
       "2013-01-04  0.270126  1.097276  0.812661  5  3.0  5.0"
      ]
     },
     "execution_count": 102,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df1.fillna(value=5)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "检查缺失数据的位置："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 103,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "      <th>E</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>False</td>\n",
       "      <td>True</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                A      B      C      D      F      E\n",
       "2013-01-01  False  False  False  False   True  False\n",
       "2013-01-02  False  False  False  False  False  False\n",
       "2013-01-03  False  False  False  False  False   True\n",
       "2013-01-04  False  False  False  False  False   True"
      ]
     },
     "execution_count": 103,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.isnull(df1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 计算操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 统计信息"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每一列的均值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 104,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A   -0.465848\n",
       "B    0.386193\n",
       "C    0.342819\n",
       "D    5.000000\n",
       "F    3.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 104,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "每一行的均值："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 105,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2013-01-01    1.381518\n",
       "2013-01-02    1.279309\n",
       "2013-01-03    1.370415\n",
       "2013-01-04    2.036013\n",
       "2013-01-05    1.357833\n",
       "2013-01-06    2.167012\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 105,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.mean(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "多个对象之间的操作，如果维度不对，`pandas` 会自动调用 `broadcasting` 机制："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 106,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2013-01-01    NaN\n",
      "2013-01-02    NaN\n",
      "2013-01-03    1.0\n",
      "2013-01-04    3.0\n",
      "2013-01-05    5.0\n",
      "2013-01-06    NaN\n",
      "Freq: D, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "s = pd.Series([1,3,5,np.nan,6,8], index=dates).shift(2)\n",
    "\n",
    "print(s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "相减 `df - s`："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 107,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-1.686629</td>\n",
       "      <td>-0.720265</td>\n",
       "      <td>-0.741031</td>\n",
       "      <td>4.0</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-2.729874</td>\n",
       "      <td>-1.902724</td>\n",
       "      <td>-2.187339</td>\n",
       "      <td>2.0</td>\n",
       "      <td>0.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-6.438070</td>\n",
       "      <td>-4.800612</td>\n",
       "      <td>-5.972152</td>\n",
       "      <td>0.0</td>\n",
       "      <td>-1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C    D    F\n",
       "2013-01-01       NaN       NaN       NaN  NaN  NaN\n",
       "2013-01-02       NaN       NaN       NaN  NaN  NaN\n",
       "2013-01-03 -1.686629 -0.720265 -0.741031  4.0  1.0\n",
       "2013-01-04 -2.729874 -1.902724 -2.187339  2.0  0.0\n",
       "2013-01-05 -6.438070 -4.800612 -5.972152  0.0 -1.0\n",
       "2013-01-06       NaN       NaN       NaN  NaN  NaN"
      ]
     },
     "execution_count": 107,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.sub(s, axis='index')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### apply 操作"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "与 `R` 中的 `apply` 操作类似，接收一个函数，默认是对将函数作用到每一列上："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 108,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "      <th>F</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2013-01-01</th>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.000000</td>\n",
       "      <td>0.526073</td>\n",
       "      <td>5</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-02</th>\n",
       "      <td>-1.083502</td>\n",
       "      <td>1.236036</td>\n",
       "      <td>0.770085</td>\n",
       "      <td>10</td>\n",
       "      <td>1.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-03</th>\n",
       "      <td>-1.770131</td>\n",
       "      <td>1.515771</td>\n",
       "      <td>1.029054</td>\n",
       "      <td>15</td>\n",
       "      <td>3.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-04</th>\n",
       "      <td>-1.500005</td>\n",
       "      <td>2.613047</td>\n",
       "      <td>1.841715</td>\n",
       "      <td>20</td>\n",
       "      <td>6.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-05</th>\n",
       "      <td>-2.938074</td>\n",
       "      <td>2.812436</td>\n",
       "      <td>0.869563</td>\n",
       "      <td>25</td>\n",
       "      <td>10.0</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2013-01-06</th>\n",
       "      <td>-2.795086</td>\n",
       "      <td>2.317157</td>\n",
       "      <td>2.056911</td>\n",
       "      <td>30</td>\n",
       "      <td>15.0</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                   A         B         C   D     F\n",
       "2013-01-01  0.000000  0.000000  0.526073   5   NaN\n",
       "2013-01-02 -1.083502  1.236036  0.770085  10   1.0\n",
       "2013-01-03 -1.770131  1.515771  1.029054  15   3.0\n",
       "2013-01-04 -1.500005  2.613047  1.841715  20   6.0\n",
       "2013-01-05 -2.938074  2.812436  0.869563  25  10.0\n",
       "2013-01-06 -2.795086  2.317157  2.056911  30  15.0"
      ]
     },
     "execution_count": 108,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(np.cumsum)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "求每列最大最小值之差："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 109,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "A    1.708196\n",
       "B    1.731315\n",
       "C    2.159501\n",
       "D    0.000000\n",
       "F    4.000000\n",
       "dtype: float64"
      ]
     },
     "execution_count": 109,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.apply(lambda x: x.max() - x.min())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 直方图"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 110,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0    4\n",
      "1    6\n",
      "2    2\n",
      "3    2\n",
      "4    4\n",
      "5    3\n",
      "6    0\n",
      "7    0\n",
      "8    3\n",
      "9    1\n",
      "dtype: int32\n"
     ]
    }
   ],
   "source": [
    "s = pd.Series(np.random.randint(0, 7, size=10))\n",
    "print(s)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "直方图信息："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 111,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "4    2\n",
      "3    2\n",
      "2    2\n",
      "0    2\n",
      "6    1\n",
      "1    1\n",
      "dtype: int64\n"
     ]
    }
   ],
   "source": [
    "print(s.value_counts())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "绘制直方图信息："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 114,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXoAAAD4CAYAAADiry33AAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAXC0lEQVR4nO3dcYycd33n8fenTgKulxpT07mcbbDRWRxptiR45PSUqsy2YBbKxT0pErZMGqNGq1aY0tbc1emJ5C4gXbiStmpICVtwDa3JtiUEu4lFsIBtimhae1OXxQkB17hlY5qlbLqwwSLa8O0f8/huWM/u/HbmGc/4p89LGu3M7/d7nv19Z5757DPPPjOjiMDMzPL1I72egJmZdZeD3swscw56M7PMOejNzDLnoDczy9xlvZ5AM2vXro2NGze2teyzzz7LqlWryp1Qj+RSSy51gGvpR7nUAZ3VMjEx8a8R8dJmfX0Z9Bs3buT48eNtLTs+Pk6tVit3Qj2SSy251AGupR/lUgd0Voukf1qsz4duzMwy56A3M8ucg97MLHMOejOzzDnozcwy56A3M8tcy6CXtEHS5yU9IemkpHc2GSNJfyDplKQvSXpNQ9/Nkr5WXG4uuwAzM1taynn088DeiHhM0ouACUlHI+LxhjFvBDYXl+uADwLXSXoJcDtQBaJY9nBEPFNqFWZmtqiWe/QR8c2IeKy4/l3gCWDdgmHbgY9F3aPAiyVdCbwBOBoRM0W4HwWGS63AzMyWpOV88YikjcAjwNUR8Z2G9geBOyPiC8XtzwK/BdSAF0bEe4v2dwPnIuL9TdY9AowAVCqVLWNjY20VND0zy9Pn2lq0I4PrVpe+zrm5OQYGBkpfb1kmn5pNGldZSemPSTfu7xS92r66IfVx6dV9narfnyfL0UktQ0NDExFRbdaX/BEIkgaA+4Ffbwz5891NFokl2i9sjBgFRgGq1Wq0+zbguw8e4q7Ji//JDmd21UpfZ7+/tXv3voeSxu0dnC/9MenG/Z2iV9tXN6Q+Lr26r1P1+/NkObpVS9JZN5Iupx7yByPik02GTAEbGm6vB84u0W5mZhdJylk3Aj4CPBERv7vIsMPALxVn3/w0MBsR3wQeBrZJWiNpDbCtaDMzs4sk5TXo9cBNwKSkE0XbbwMvA4iIe4EjwJuAU8D3gLcVfTOS3gMcK5a7IyJmypu+mZm10jLoi3+wNjvW3jgmgLcv0rcf2N/W7MzMrGN+Z6yZWeYc9GZmmXPQm5llzkFvZpY5B72ZWeYc9GZmmXPQm5llzkFvZpY5B72ZWeYc9GZmmXPQm5llzkFvZpY5B72ZWeYc9GZmmXPQm5llzkFvZpa5ll88Imk/8GZgOiKubtL/34FdDet7FfDS4tulzgDfBZ4H5hf7hnIzM+uelD36A8DwYp0R8TsRcU1EXAPcCvzVgq8LHCr6HfJmZj3QMugj4hEg9XtedwL3dTQjMzMrVWnH6CX9KPU9//sbmgP4jKQJSSNl/S4zM0un+vd6txgkbQQebHaMvmHMW4C3RsR/bWj7jxFxVtJPAEeBdxSvEJotPwKMAFQqlS1jY2PLqeP/mZ6Z5elzbS3akcF1q0tf59zcHAMDA6WvtyyTT80mjauspPTHpBv3d4pebV/dkPq49Oq+TtXvz5Pl6KSWoaGhicUOkbf8Z+wy7GDBYZuIOFv8nJb0ALAVaBr0ETEKjAJUq9Wo1WptTeLug4e4a7LMstKc2VUrfZ3j4+O0ez9cDLv3PZQ0bu/gfOmPSTfu7xS92r66IfVx6dV9narfnyfL0a1aSjl0I2k18FrgUEPbKkkvOn8d2AZ8uYzfZ2Zm6VJOr7wPqAFrJU0BtwOXA0TEvcWw/wZ8JiKebVi0Ajwg6fzv+XhEfLq8qZuZWYqWQR8ROxPGHKB+GmZj22ng1e1OzMzMyuF3xpqZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZa5l0EvaL2laUtPve5VUkzQr6URxua2hb1jSk5JOSdpX5sTNzCxNyh79AWC4xZi/johrissdAJJWAPcAbwSuAnZKuqqTyZqZ2fK1DPqIeASYaWPdW4FTEXE6Ip4DxoDtbazHzMw6oIhoPUjaCDwYEVc36asB9wNTwFngXRFxUtKNwHBE3FKMuwm4LiL2LPI7RoARgEqlsmVsbKydepiemeXpc20t2pHBdatLX+fc3BwDAwOlr7csk0/NJo2rrKT0x6Qb93eKXm1f3ZD6uPTqvk7V78+T5eiklqGhoYmIqDbru6yjWdU9Brw8IuYkvQn4FLAZUJOxi/5ViYhRYBSgWq1GrVZrazJ3HzzEXZNllLU8Z3bVSl/n+Pg47d4PF8PufQ8ljds7OF/6Y9KN+ztFr7avbkh9XHp1X6fq9+fJcnSrlo7PuomI70TEXHH9CHC5pLXU9/A3NAxdT32P38zMLqKOg17Sf5Ck4vrWYp3fBo4BmyVtknQFsAM43OnvMzOz5Wn5uk3SfUANWCtpCrgduBwgIu4FbgR+VdI8cA7YEfUD//OS9gAPAyuA/RFxsitVmJnZoloGfUTsbNH/AeADi/QdAY60NzUzMyuD3xlrZpY5B72ZWeYc9GZmmXPQm5llzkFvZpY5B72ZWeYc9GZmmXPQm5llzkFvZpY5B72ZWeYc9GZmmXPQm5llzkFvZpY5B72ZWeYc9GZmmXPQm5llzkFvZpa5lkEvab+kaUlfXqR/l6QvFZcvSnp1Q98ZSZOSTkg6XubEzcwsTcoe/QFgeIn+rwOvjYifAt4DjC7oH4qIayKi2t4UzcysEynfGfuIpI1L9H+x4eajwPrOp2VmZmVRRLQeVA/6ByPi6hbj3gX854i4pbj9deAZIIAPRcTCvf3GZUeAEYBKpbJlbGwssYQfNj0zy9Pn2lq0I4PrVpe+zrm5OQYGBkpfb1kmn5pNGldZSemPSTfu7xS92r66IfVx6dV9narfnyfL0UktQ0NDE4sdOWm5R59K0hDwy8DPNDRfHxFnJf0EcFTSVyLikWbLF38ERgGq1WrUarW25nH3wUPcNVlaWcnO7KqVvs7x8XHavR8uht37Hkoat3dwvvTHpBv3d4pebV/dkPq49Oq+TtXvz5Pl6FYtpZx1I+mngA8D2yPi2+fbI+Js8XMaeADYWsbvMzOzdB0HvaSXAZ8EboqIrza0r5L0ovPXgW1A0zN3zMyse1q+bpN0H1AD1kqaAm4HLgeIiHuB24AfB/5QEsB8cZyoAjxQtF0GfDwiPt2FGszMbAkpZ93sbNF/C3BLk/bTwKsvXMLMzC4mvzPWzCxzDnozs8w56M3MMuegNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxzSUEvab+kaUlNv/NVdX8g6ZSkL0l6TUPfzZK+VlxuLmviZmaWJnWP/gAwvET/G4HNxWUE+CCApJdQ/47Z64CtwO2S1rQ7WTMzW76koI+IR4CZJYZsBz4WdY8CL5Z0JfAG4GhEzETEM8BRlv6DYWZmJVNEpA2UNgIPRsTVTfoeBO6MiC8Utz8L/BZQA14YEe8t2t8NnIuI9zdZxwj1VwNUKpUtY2NjbZQD0zOzPH2urUX7TmUlSbUMrlvd/ck0MfnUbNK41DqWo1c1e/vqP3NzcwwMDJS6ztRtu2ybVq9ou5ahoaGJiKg267uso1n9f2rSFku0X9gYMQqMAlSr1ajVam1N5O6Dh7hrsqyyemvv4HxSLWd21bo/mSZ273soaVxqHcvRq5q9ffWf8fFx2s2LxaRu22U7MLyq9FqgvLNupoANDbfXA2eXaDczs4ukrKA/DPxScfbNTwOzEfFN4GFgm6Q1xT9htxVtZmZ2kSS9BpV0H/Xj7WslTVE/k+ZygIi4FzgCvAk4BXwPeFvRNyPpPcCxYlV3RMRS/9Q1M7OSJQV9ROxs0R/A2xfp2w/sX/7UzMysDH5nrJlZ5hz0ZmaZc9CbmWXOQW9mljkHvZlZ5hz0ZmaZc9CbmWXOQW9mljkHvZlZ5hz0ZmaZc9CbmWXOQW9mljkHvZlZ5hz0ZmaZc9CbmWXOQW9mljkHvZlZ5pKCXtKwpCclnZK0r0n/70k6UVy+KunfGvqeb+g7XObkzcystZZfJShpBXAP8HpgCjgm6XBEPH5+TET8RsP4dwDXNqziXERcU96UzcxsOVL26LcCpyLidEQ8B4wB25cYvxO4r4zJmZlZ51T/Xu8lBkg3AsMRcUtx+ybguojY02Tsy4FHgfUR8XzRNg+cAOaBOyPiU4v8nhFgBKBSqWwZGxtrq6DpmVmePtfWon2nspKkWgbXre7+ZJqYfGo2aVxqHcvRq5q9ffWfubk5BgYGSl1n6rZdtk2rV7Rdy9DQ0EREVJv1tTx0A6hJ22J/HXYAnzgf8oWXRcRZSa8APidpMiL+8YIVRowCowDVajVqtVrC1C5098FD3DWZUlb/2zs4n1TLmV217k+mid37Hkoal1rHcvSqZm9f/Wd8fJx282Ixqdt22Q4Mryq9Fkg7dDMFbGi4vR44u8jYHSw4bBMRZ4ufp4Fxfvj4vZmZdVlK0B8DNkvaJOkK6mF+wdkzkl4JrAH+pqFtjaQXFNfXAtcDjy9c1szMuqfl67aImJe0B3gYWAHsj4iTku4AjkfE+dDfCYzFDx/0fxXwIUk/oP5H5c7Gs3XMzKz7kg42RsQR4MiCttsW3P5fTZb7IjDYwfzMzKxDfmesmVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmHPRmZplz0JuZZc5Bb2aWOQe9mVnmkoJe0rCkJyWdkrSvSf9uSd+SdKK43NLQd7OkrxWXm8ucvJmZtdbyqwQlrQDuAV4PTAHHJB1u8t2vfxYRexYs+xLgdqAKBDBRLPtMKbM3M7OWUvbotwKnIuJ0RDwHjAHbE9f/BuBoRMwU4X4UGG5vqmZm1g5FxNIDpBuB4Yi4pbh9E3Bd4967pN3A/wG+BXwV+I2I+IakdwEvjIj3FuPeDZyLiPc3+T0jwAhApVLZMjY21lZB0zOzPH2urUX7TmUlSbUMrlvd/ck0MfnUbNK41DqWo1c1e/vqP3NzcwwMDJS6ztRtu2ybVq9ou5ahoaGJiKg262t56AZQk7aFfx3+ErgvIr4v6VeAjwI/l7hsvTFiFBgFqFarUavVEqZ2obsPHuKuyZSy+t/ewfmkWs7sqnV/Mk3s3vdQ0rjUOpajVzV7++o/4+PjtJsXi0ndtst2YHhV6bVA2qGbKWBDw+31wNnGARHx7Yj4fnHzj4AtqcuamVl3pQT9MWCzpE2SrgB2AIcbB0i6suHmDcATxfWHgW2S1khaA2wr2szM7CJp+botIuYl7aEe0CuA/RFxUtIdwPGIOAz8mqQbgHlgBthdLDsj6T3U/1gA3BERM12ow8zMFpF0sDEijgBHFrTd1nD9VuDWRZbdD+zvYI5mZtYBvzPWzCxzDnozs8w56M3MMuegNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxzSUEvaVjSk5JOSdrXpP83JT0u6UuSPivp5Q19z0s6UVwOL1zWzMy6q+VXCUpaAdwDvB6YAo5JOhwRjzcM+3ugGhHfk/SrwP8F3lL0nYuIa0qet5mZJUrZo98KnIqI0xHxHDAGbG8cEBGfj4jvFTcfBdaXO00zM2uXImLpAdKNwHBE3FLcvgm4LiL2LDL+A8C/RMR7i9vzwAlgHrgzIj61yHIjwAhApVLZMjY21lZB0zOzPH2urUX7TmUlSbUMrlvd/ck0MfnUbNK41DqWo1c1e/vqP3NzcwwMDJS6ztRtu2ybVq9ou5ahoaGJiKg262t56AZQk7amfx0kvRWoAq9taH5ZRJyV9Argc5ImI+IfL1hhxCgwClCtVqNWqyVM7UJ3HzzEXZMpZfW/vYPzSbWc2VXr/mSa2L3voaRxqXUsR69q9vbVf8bHx2k3LxaTum2X7cDwqtJrgbRDN1PAhobb64GzCwdJeh3wP4EbIuL759sj4mzx8zQwDlzbwXzNzGyZUoL+GLBZ0iZJVwA7gB86e0bStcCHqIf8dEP7GkkvKK6vBa4HGv+Ja2ZmXdbydVtEzEvaAzwMrAD2R8RJSXcAxyPiMPA7wADwF5IA/jkibgBeBXxI0g+o/1G5c8HZOmZm1mVJBxsj4ghwZEHbbQ3XX7fIcl8EBjuZoJmZdcbvjDUzy5yD3swscw56M7PMOejNzDLnoDczy5yD3swscw56M7PMOejNzDLnoDczy5yD3swscw56M7PMOejNzDLnoDczy5yD3swscw56M7PMOejNzDLnoDczy1xS0EsalvSkpFOS9jXpf4GkPyv6/1bSxoa+W4v2JyW9obypm5lZipZBL2kFcA/wRuAqYKekqxYM+2XgmYj4T8DvAe8rlr2K+peJ/yQwDPxhsT4zM7tIUvbotwKnIuJ0RDwHjAHbF4zZDny0uP4J4OdV/5bw7cBYRHw/Ir4OnCrWZ2ZmF0nKl4OvA77RcHsKuG6xMRExL2kW+PGi/dEFy65r9kskjQAjxc05SU8mzK2ZtcC/trlsX/m1xFr0voswmQ6k1rEcPazZ21f/yeYxGXpfR7W8fLGOlKBXk7ZIHJOybL0xYhQYTZjPkiQdj4hqp+vpB7nUkksd4Fr6US51QPdqSTl0MwVsaLi9Hji72BhJlwGrgZnEZc3MrItSgv4YsFnSJklXUP/n6uEFYw4DNxfXbwQ+FxFRtO8ozsrZBGwG/q6cqZuZWYqWh26KY+57gIeBFcD+iDgp6Q7geEQcBj4C/ImkU9T35HcUy56U9OfA48A88PaIeL5LtZzX8eGfPpJLLbnUAa6lH+VSB3SpFtV3vM3MLFd+Z6yZWeYc9GZmmcsm6Ft9TMOlQtJ+SdOSvtzruXRK0gZJn5f0hKSTkt7Z6zm1S9ILJf2dpH8oavnfvZ5TJyStkPT3kh7s9Vw6IemMpElJJyQd7/V8OiHpxZI+IekrxXPmv5S27hyO0Rcfq/BV4PXUT+k8BuyMiMd7OrE2SPpZYA74WERc3ev5dELSlcCVEfGYpBcBE8AvXqKPi4BVETEn6XLgC8A7I+LRFov2JUm/CVSBH4uIN/d6Pu2SdAaoRsQl/4YpSR8F/joiPlyc4fijEfFvZaw7lz36lI9puCRExCPUz1y65EXENyPiseL6d4EnWOSd0f0u6uaKm5cXl0tyL0nSeuAXgA/3ei5WJ+nHgJ+lfgYjEfFcWSEP+QR9s49puCQDJVfFJ5peC/xtb2fSvuJwxwlgGjgaEZdqLb8P/A/gB72eSAkC+IykieJjVC5VrwC+BfxxcUjtw5JWlbXyXII++aMW7OKTNADcD/x6RHyn1/NpV0Q8HxHXUH+H91ZJl9yhNUlvBqYjYqLXcynJ9RHxGuqfrvv24tDnpegy4DXAByPiWuBZoLT/NeYS9P6ohT5VHM++HzgYEZ/s9XzKULykHqf+0duXmuuBG4pj22PAz0n6095OqX0Rcbb4OQ08wKX76bhTwFTDq8RPUA/+UuQS9Ckf02AXWfEPzI8AT0TE7/Z6Pp2Q9FJJLy6urwReB3ylt7Navoi4NSLWR8RG6s+Tz0XEW3s8rbZIWlX8k5/iMMc24JI8Wy0i/gX4hqRXFk0/T/0TBUqR8umVfW+xj2no8bTaIuk+oAaslTQF3B4RH+ntrNp2PXATMFkc2wb47Yg40sM5tetK4KPFGV4/Avx5RFzSpyZmoAI8UN+f4DLg4xHx6d5OqSPvAA4WO6ungbeVteIsTq80M7PF5XLoxszMFuGgNzPLnIPezCxzDnozs8w56M3MMuegNzPLnIPezCxz/w63rtNr1BI1LwAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {
      "needs_background": "light"
     },
     "output_type": "display_data"
    }
   ],
   "source": [
    "h = s.hist()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 字符串方法"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "当 `Series` 或者 `DataFrame` 的某一列是字符串时，我们可以用 `.str` 对这个字符串数组进行字符串的基本操作： "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 115,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "0       a\n",
      "1       b\n",
      "2       c\n",
      "3    aaba\n",
      "4    baca\n",
      "5     NaN\n",
      "6    caba\n",
      "7     dog\n",
      "8     cat\n",
      "dtype: object\n"
     ]
    }
   ],
   "source": [
    "s = pd.Series(['A', 'B', 'C', 'Aaba', 'Baca', np.nan, 'CABA', 'dog', 'cat'])\n",
    "\n",
    "print(s.str.lower())"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 合并"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 连接"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 116,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.389512</td>\n",
       "      <td>1.654250</td>\n",
       "      <td>-1.045115</td>\n",
       "      <td>1.307092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.257233</td>\n",
       "      <td>0.119677</td>\n",
       "      <td>-1.593614</td>\n",
       "      <td>0.247077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>-0.150465</td>\n",
       "      <td>1.760264</td>\n",
       "      <td>-0.011067</td>\n",
       "      <td>-0.838017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>-1.360947</td>\n",
       "      <td>0.849280</td>\n",
       "      <td>-1.138585</td>\n",
       "      <td>0.348607</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.281877</td>\n",
       "      <td>1.012187</td>\n",
       "      <td>-0.873744</td>\n",
       "      <td>-1.664281</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>0.355814</td>\n",
       "      <td>0.773204</td>\n",
       "      <td>-1.316621</td>\n",
       "      <td>-0.222620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.009654</td>\n",
       "      <td>0.617403</td>\n",
       "      <td>0.714654</td>\n",
       "      <td>-0.816418</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.000414</td>\n",
       "      <td>0.700567</td>\n",
       "      <td>-0.071003</td>\n",
       "      <td>0.118879</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.326674</td>\n",
       "      <td>1.045098</td>\n",
       "      <td>-1.677747</td>\n",
       "      <td>-0.948250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-0.133706</td>\n",
       "      <td>0.557059</td>\n",
       "      <td>0.537434</td>\n",
       "      <td>0.329009</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0  1.389512  1.654250 -1.045115  1.307092\n",
       "1 -1.257233  0.119677 -1.593614  0.247077\n",
       "2 -0.150465  1.760264 -0.011067 -0.838017\n",
       "3 -1.360947  0.849280 -1.138585  0.348607\n",
       "4 -1.281877  1.012187 -0.873744 -1.664281\n",
       "5  0.355814  0.773204 -1.316621 -0.222620\n",
       "6  0.009654  0.617403  0.714654 -0.816418\n",
       "7 -0.000414  0.700567 -0.071003  0.118879\n",
       "8  0.326674  1.045098 -1.677747 -0.948250\n",
       "9 -0.133706  0.557059  0.537434  0.329009"
      ]
     },
     "execution_count": 116,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(10, 4))\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以使用 `pd.concat` 函数将多个 `pandas` 对象进行连接："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 117,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>0</th>\n",
       "      <th>1</th>\n",
       "      <th>2</th>\n",
       "      <th>3</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1.389512</td>\n",
       "      <td>1.654250</td>\n",
       "      <td>-1.045115</td>\n",
       "      <td>1.307092</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>-1.257233</td>\n",
       "      <td>0.119677</td>\n",
       "      <td>-1.593614</td>\n",
       "      <td>0.247077</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>-1.281877</td>\n",
       "      <td>1.012187</td>\n",
       "      <td>-0.873744</td>\n",
       "      <td>-1.664281</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.000414</td>\n",
       "      <td>0.700567</td>\n",
       "      <td>-0.071003</td>\n",
       "      <td>0.118879</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>0.326674</td>\n",
       "      <td>1.045098</td>\n",
       "      <td>-1.677747</td>\n",
       "      <td>-0.948250</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>9</th>\n",
       "      <td>-0.133706</td>\n",
       "      <td>0.557059</td>\n",
       "      <td>0.537434</td>\n",
       "      <td>0.329009</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          0         1         2         3\n",
       "0  1.389512  1.654250 -1.045115  1.307092\n",
       "1 -1.257233  0.119677 -1.593614  0.247077\n",
       "4 -1.281877  1.012187 -0.873744 -1.664281\n",
       "7 -0.000414  0.700567 -0.071003  0.118879\n",
       "8  0.326674  1.045098 -1.677747 -0.948250\n",
       "9 -0.133706  0.557059  0.537434  0.329009"
      ]
     },
     "execution_count": 117,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pieces = [df[:2], df[4:5], df[7:]]\n",
    "\n",
    "pd.concat(pieces)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### 数据库中的 Join"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`merge` 可以实现数据库中的 `join` 操作："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 122,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "   key  lval\n",
      "0  foo     1\n",
      "1  foo     2\n",
      "   key  rval\n",
      "0  foo     4\n",
      "1  foo     5\n"
     ]
    }
   ],
   "source": [
    "left = pd.DataFrame({'key': ['foo', 'foo'], 'lval': [1, 2]})\n",
    "right = pd.DataFrame({'key': ['foo', 'foo'], 'rval': [4, 5]})\n",
    "\n",
    "print(left)\n",
    "print(right)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 123,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>key</th>\n",
       "      <th>lval</th>\n",
       "      <th>rval</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>foo</td>\n",
       "      <td>1</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>4</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>foo</td>\n",
       "      <td>2</td>\n",
       "      <td>5</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   key  lval  rval\n",
       "0  foo     1     4\n",
       "1  foo     1     5\n",
       "2  foo     2     4\n",
       "3  foo     2     5"
      ]
     },
     "execution_count": 123,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.merge(left, right, on='key')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### append"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "向 `DataFrame` 中添加行："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 124,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.937837</td>\n",
       "      <td>-1.614231</td>\n",
       "      <td>0.161506</td>\n",
       "      <td>1.388221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.163856</td>\n",
       "      <td>-0.666541</td>\n",
       "      <td>-0.079230</td>\n",
       "      <td>2.207244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.736106</td>\n",
       "      <td>0.412114</td>\n",
       "      <td>-0.223511</td>\n",
       "      <td>0.195125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.680288</td>\n",
       "      <td>0.679103</td>\n",
       "      <td>1.912433</td>\n",
       "      <td>0.057921</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.199616</td>\n",
       "      <td>-0.040232</td>\n",
       "      <td>-1.308178</td>\n",
       "      <td>0.359331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.998282</td>\n",
       "      <td>0.181225</td>\n",
       "      <td>0.588982</td>\n",
       "      <td>-0.558540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.567463</td>\n",
       "      <td>1.147116</td>\n",
       "      <td>0.444354</td>\n",
       "      <td>1.795370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.823486</td>\n",
       "      <td>0.608082</td>\n",
       "      <td>1.386478</td>\n",
       "      <td>0.502626</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B         C         D\n",
       "0  0.937837 -1.614231  0.161506  1.388221\n",
       "1  0.163856 -0.666541 -0.079230  2.207244\n",
       "2  0.736106  0.412114 -0.223511  0.195125\n",
       "3  1.680288  0.679103  1.912433  0.057921\n",
       "4  0.199616 -0.040232 -1.308178  0.359331\n",
       "5 -0.998282  0.181225  0.588982 -0.558540\n",
       "6  0.567463  1.147116  0.444354  1.795370\n",
       "7 -0.823486  0.608082  1.386478  0.502626"
      ]
     },
     "execution_count": 124,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(8, 4), columns=['A','B','C','D'])\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将第三行的值添加到最后："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 125,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>0.937837</td>\n",
       "      <td>-1.614231</td>\n",
       "      <td>0.161506</td>\n",
       "      <td>1.388221</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>0.163856</td>\n",
       "      <td>-0.666541</td>\n",
       "      <td>-0.079230</td>\n",
       "      <td>2.207244</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>0.736106</td>\n",
       "      <td>0.412114</td>\n",
       "      <td>-0.223511</td>\n",
       "      <td>0.195125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>1.680288</td>\n",
       "      <td>0.679103</td>\n",
       "      <td>1.912433</td>\n",
       "      <td>0.057921</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>0.199616</td>\n",
       "      <td>-0.040232</td>\n",
       "      <td>-1.308178</td>\n",
       "      <td>0.359331</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>-0.998282</td>\n",
       "      <td>0.181225</td>\n",
       "      <td>0.588982</td>\n",
       "      <td>-0.558540</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>0.567463</td>\n",
       "      <td>1.147116</td>\n",
       "      <td>0.444354</td>\n",
       "      <td>1.795370</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>-0.823486</td>\n",
       "      <td>0.608082</td>\n",
       "      <td>1.386478</td>\n",
       "      <td>0.502626</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>8</th>\n",
       "      <td>1.680288</td>\n",
       "      <td>0.679103</td>\n",
       "      <td>1.912433</td>\n",
       "      <td>0.057921</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "          A         B         C         D\n",
       "0  0.937837 -1.614231  0.161506  1.388221\n",
       "1  0.163856 -0.666541 -0.079230  2.207244\n",
       "2  0.736106  0.412114 -0.223511  0.195125\n",
       "3  1.680288  0.679103  1.912433  0.057921\n",
       "4  0.199616 -0.040232 -1.308178  0.359331\n",
       "5 -0.998282  0.181225  0.588982 -0.558540\n",
       "6  0.567463  1.147116  0.444354  1.795370\n",
       "7 -0.823486  0.608082  1.386478  0.502626\n",
       "8  1.680288  0.679103  1.912433  0.057921"
      ]
     },
     "execution_count": 125,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "s = df.iloc[3]\n",
    "\n",
    "df.append(s, ignore_index=True)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Grouping"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 128,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.958940</td>\n",
       "      <td>-0.005494</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>bar</td>\n",
       "      <td>one</td>\n",
       "      <td>-0.608926</td>\n",
       "      <td>-0.021452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>1.679024</td>\n",
       "      <td>-0.482465</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>bar</td>\n",
       "      <td>three</td>\n",
       "      <td>-0.056294</td>\n",
       "      <td>-0.362286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>foo</td>\n",
       "      <td>two</td>\n",
       "      <td>1.555639</td>\n",
       "      <td>0.380361</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>bar</td>\n",
       "      <td>two</td>\n",
       "      <td>1.879979</td>\n",
       "      <td>-0.227308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>6</th>\n",
       "      <td>foo</td>\n",
       "      <td>one</td>\n",
       "      <td>-1.761195</td>\n",
       "      <td>-0.531552</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>7</th>\n",
       "      <td>foo</td>\n",
       "      <td>three</td>\n",
       "      <td>2.249583</td>\n",
       "      <td>2.560065</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "     A      B         C         D\n",
       "0  foo    one -0.958940 -0.005494\n",
       "1  bar    one -0.608926 -0.021452\n",
       "2  foo    two  1.679024 -0.482465\n",
       "3  bar  three -0.056294 -0.362286\n",
       "4  foo    two  1.555639  0.380361\n",
       "5  bar    two  1.879979 -0.227308\n",
       "6  foo    one -1.761195 -0.531552\n",
       "7  foo  three  2.249583  2.560065"
      ]
     },
     "execution_count": 128,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({'A' : ['foo', 'bar', 'foo', 'bar',\n",
    "                          'foo', 'bar', 'foo', 'foo'],\n",
    "                   'B' : ['one', 'one', 'two', 'three',\n",
    "                          'two', 'two', 'one', 'three'],\n",
    "                   'C' : np.random.randn(8),\n",
    "                   'D' : np.random.randn(8)})\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按照 `A` 的值进行分类："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 129,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>bar</th>\n",
       "      <td>1.214759</td>\n",
       "      <td>-0.611045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>foo</th>\n",
       "      <td>2.764111</td>\n",
       "      <td>1.920916</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "            C         D\n",
       "A                      \n",
       "bar  1.214759 -0.611045\n",
       "foo  2.764111  1.920916"
      ]
     },
     "execution_count": 129,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby('A').sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "按照 `A, B` 的值进行分类："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 130,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.608926</td>\n",
       "      <td>-0.021452</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>-0.056294</td>\n",
       "      <td>-0.362286</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>1.879979</td>\n",
       "      <td>-0.227308</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"3\" valign=\"top\">foo</th>\n",
       "      <th>one</th>\n",
       "      <td>-2.720135</td>\n",
       "      <td>-0.537045</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>three</th>\n",
       "      <td>2.249583</td>\n",
       "      <td>2.560065</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>3.234663</td>\n",
       "      <td>-0.102103</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                  C         D\n",
       "A   B                        \n",
       "bar one   -0.608926 -0.021452\n",
       "    three -0.056294 -0.362286\n",
       "    two    1.879979 -0.227308\n",
       "foo one   -2.720135 -0.537045\n",
       "    three  2.249583  2.560065\n",
       "    two    3.234663 -0.102103"
      ]
     },
     "execution_count": 130,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(['A', 'B']).sum()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 改变形状"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### Stack"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "产生一个多 `index` 的 `DataFrame`："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 131,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>0.774864</td>\n",
       "      <td>0.463285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.867995</td>\n",
       "      <td>1.321638</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.148791</td>\n",
       "      <td>-1.053125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.243865</td>\n",
       "      <td>1.984993</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">foo</th>\n",
       "      <th>one</th>\n",
       "      <td>0.531393</td>\n",
       "      <td>-0.420909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.087908</td>\n",
       "      <td>-0.144013</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">qux</th>\n",
       "      <th>one</th>\n",
       "      <td>1.516681</td>\n",
       "      <td>0.557655</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.544756</td>\n",
       "      <td>0.228163</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     0.774864  0.463285\n",
       "      two    -0.867995  1.321638\n",
       "baz   one    -0.148791 -1.053125\n",
       "      two    -0.243865  1.984993\n",
       "foo   one     0.531393 -0.420909\n",
       "      two    -0.087908 -0.144013\n",
       "qux   one     1.516681  0.557655\n",
       "      two    -0.544756  0.228163"
      ]
     },
     "execution_count": 131,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "tuples = list(zip(*[['bar', 'bar', 'baz', 'baz',\n",
    "                     'foo', 'foo', 'qux', 'qux'],\n",
    "                    ['one', 'two', 'one', 'two',\n",
    "                     'one', 'two', 'one', 'two']]))\n",
    "\n",
    "index = pd.MultiIndex.from_tuples(tuples, names=['first', 'second'])\n",
    "df = pd.DataFrame(np.random.randn(8, 2), index=index, columns=['A', 'B'])\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`stack` 方法将 `columns` 变成一个新的 `index` 部分："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 132,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "first  second   \n",
       "bar    one     A    0.774864\n",
       "               B    0.463285\n",
       "       two     A   -0.867995\n",
       "               B    1.321638\n",
       "baz    one     A   -0.148791\n",
       "               B   -1.053125\n",
       "       two     A   -0.243865\n",
       "               B    1.984993\n",
       "dtype: float64"
      ]
     },
     "execution_count": 132,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df2 = df[:4]\n",
    "\n",
    "stacked = df2.stack()\n",
    "\n",
    "stacked"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以使用 `unstack()` 将最后一级 `index` 放回 `column`："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 133,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th>second</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>one</th>\n",
       "      <td>0.774864</td>\n",
       "      <td>0.463285</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.867995</td>\n",
       "      <td>1.321638</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>one</th>\n",
       "      <td>-0.148791</td>\n",
       "      <td>-1.053125</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>two</th>\n",
       "      <td>-0.243865</td>\n",
       "      <td>1.984993</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "                     A         B\n",
       "first second                    \n",
       "bar   one     0.774864  0.463285\n",
       "      two    -0.867995  1.321638\n",
       "baz   one    -0.148791 -1.053125\n",
       "      two    -0.243865  1.984993"
      ]
     },
     "execution_count": 133,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "也可以指定其他的级别："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 134,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>second</th>\n",
       "      <th>one</th>\n",
       "      <th>two</th>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>first</th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "      <th></th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">bar</th>\n",
       "      <th>A</th>\n",
       "      <td>0.774864</td>\n",
       "      <td>-0.867995</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>0.463285</td>\n",
       "      <td>1.321638</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th rowspan=\"2\" valign=\"top\">baz</th>\n",
       "      <th>A</th>\n",
       "      <td>-0.148791</td>\n",
       "      <td>-0.243865</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>B</th>\n",
       "      <td>-1.053125</td>\n",
       "      <td>1.984993</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "second        one       two\n",
       "first                      \n",
       "bar   A  0.774864 -0.867995\n",
       "      B  0.463285  1.321638\n",
       "baz   A -0.148791 -0.243865\n",
       "      B -1.053125  1.984993"
      ]
     },
     "execution_count": 134,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "stacked.unstack(1)"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 时间序列"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "金融分析中常用到时间序列数据："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 135,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-06    1.185944\n",
       "2012-03-07    0.185575\n",
       "2012-03-08   -0.872285\n",
       "2012-03-09   -0.397521\n",
       "2012-03-10    0.076057\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 135,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "rng = pd.date_range('3/6/2012 00:00', periods=5, freq='D')\n",
    "ts = pd.Series(np.random.randn(len(rng)), rng)\n",
    "\n",
    "ts"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "标准时间表示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 136,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-06 00:00:00+00:00    1.185944\n",
       "2012-03-07 00:00:00+00:00    0.185575\n",
       "2012-03-08 00:00:00+00:00   -0.872285\n",
       "2012-03-09 00:00:00+00:00   -0.397521\n",
       "2012-03-10 00:00:00+00:00    0.076057\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 136,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts_utc = ts.tz_localize('UTC')\n",
    "\n",
    "ts_utc"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "改变时区表示："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 137,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "2012-03-05 19:00:00-05:00    1.185944\n",
       "2012-03-06 19:00:00-05:00    0.185575\n",
       "2012-03-07 19:00:00-05:00   -0.872285\n",
       "2012-03-08 19:00:00-05:00   -0.397521\n",
       "2012-03-09 19:00:00-05:00    0.076057\n",
       "Freq: D, dtype: float64"
      ]
     },
     "execution_count": 137,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "ts_utc.tz_convert('US/Eastern')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## Categoricals"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 138,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>id</th>\n",
       "      <th>raw_grade</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>1</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>3</td>\n",
       "      <td>b</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>4</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>5</td>\n",
       "      <td>a</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>5</th>\n",
       "      <td>6</td>\n",
       "      <td>e</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   id raw_grade\n",
       "0   1         a\n",
       "1   2         b\n",
       "2   3         b\n",
       "3   4         a\n",
       "4   5         a\n",
       "5   6         e"
      ]
     },
     "execution_count": 138,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df = pd.DataFrame({\"id\":[1,2,3,4,5,6], \"raw_grade\":['a', 'b', 'b', 'a', 'a', 'e']})\n",
    "\n",
    "df"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "可以将 `grade` 变成类别："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 139,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    a\n",
       "1    b\n",
       "2    b\n",
       "3    a\n",
       "4    a\n",
       "5    e\n",
       "Name: grade, dtype: category\n",
       "Categories (3, object): [a, b, e]"
      ]
     },
     "execution_count": 139,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"raw_grade\"].astype(\"category\")\n",
    "\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "将类别的表示转化为有意义的字符："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 140,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    very good\n",
       "1         good\n",
       "2         good\n",
       "3    very good\n",
       "4    very good\n",
       "5     very bad\n",
       "Name: grade, dtype: category\n",
       "Categories (3, object): [very good, good, very bad]"
      ]
     },
     "execution_count": 140,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"].cat.categories = [\"very good\", \"good\", \"very bad\"]\n",
    "\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "添加缺失的类别："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 141,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "0    very good\n",
       "1         good\n",
       "2         good\n",
       "3    very good\n",
       "4    very good\n",
       "5     very bad\n",
       "Name: grade, dtype: category\n",
       "Categories (5, object): [very bad, bad, medium, good, very good]"
      ]
     },
     "execution_count": 141,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df[\"grade\"] = df[\"grade\"].cat.set_categories([\"very bad\", \"bad\", \"medium\", \"good\", \"very good\"])\n",
    "df[\"grade\"]"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 `grade` 分组："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 142,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/plain": [
       "grade\n",
       "very bad     1\n",
       "bad          0\n",
       "medium       0\n",
       "good         2\n",
       "very good    3\n",
       "dtype: int64"
      ]
     },
     "execution_count": 142,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df.groupby(\"grade\").size()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 绘图"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "使用 `ggplot` 风格："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 143,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "plt.style.use('ggplot')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`Series` 绘图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 144,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "ts = pd.Series(np.random.randn(1000), index=pd.date_range('1/1/2000', periods=1000))\n",
    "\n",
    "p = ts.cumsum().plot()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "`DataFrame` 按照 `columns` 绘图："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 145,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXkAAAEECAYAAADNv0QiAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADh0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uMy4xLjEsIGh0dHA6Ly9tYXRwbG90bGliLm9yZy8QZhcZAAAgAElEQVR4nOydd4Acd3n3PzOzvV7vd+q9N0tykWxZNu42GIwNmGZKgBcIEAdC3kCIgfhNMA5vAq/j4JBAgh3jImNjY1vYkotkdVn91K7oetved2feP2Z3dve6pDvpdJrPP3e7M7M7MzvzzPN7fs/zfQRFURR0dHR0dCYl4sXeAR0dHR2d8UM38jo6OjqTGN3I6+jo6ExidCOvo6OjM4nRjbyOjo7OJEY38jo6OjqTGN3I6+jo6ExiDBd7B/rT1tZ2sXdB5wJQUlJCT0/Pxd4NnXFG/50vDFVVVUMu0z15HR0dnUmMbuR1dHR0JjG6kdfR0dGZxOhGXkdHR2cSoxt5HR0dnUmMbuR1dHR0JjG6kde5YIQTKXRlax2dC4tu5HUuCCd6I9z39Al+e0DPmdbRuZDoRl7nrAnEUnSHEgA0eKJ8ftMpmn2xYbd5/aQPgD1twXHfPx0dnSy6kdc5a77y0mk+t+kUAK+e8NIVSvDVlxqo74kMun4iJfNusx+AjkBCD9no6FxAdCOvc1bIioIvmgJAURTO5Hjwf/lq04D1FUXhJ++2EYzLrKl1EErIdKVHAX2RJJGEfGF2XEfnMkU38jpnxS93d2r/H+uJcKhrcO8dYGdLgA89Wc97Z4IUWCQ+NL8YgEZPjOPdQT7z3El+saNj3PdZR+dyRjfyOqNGVhReP+XTXu9qGRhf98dS2v8v1XuQ05GZz68sZ0qBGQE47Yny5J5WAN7vCA34jFdPePnS70/pYR0dnTFAN/I6o6bREyOeUrh2qkt97VVDNQ+sKMNtkQC4/5kT9EWSABhEAQCrQWRRuQ2LQWRmsYUtDX7qu9QHRDgh8/pJLyk5a9B/sbODtkCCl497L9ix6ehMVnQjrzMq4imZb7zSCMCCchsAe9pUL/y2OYX84wemaOs2eqIAeKNJ5pVa+Zfbp+G2qKrWyyrtdAQTNHkirKyyk5AV/mVHB08d7CGcSPHjrS3a5zyeExrS0dE5N3QjrzMqTvaqhttlllhb68xbJgoCZXaj9jozMeuNpqh0miixZZc5zZL2/82zC7X/d5wJ8uzhPnYMEgLS0dE5d3QjrzMiveEE750JAPCTm6bgNEtcMyXf0AuCwK/vngnAbw90k0jJ+KIpCixS3no2o3rJSaLAiio71093A9Dki/HM4V5tvZtnFQBw95PHONoVHp8D09G5DNCNvM6wdAbjfPb5U7xwzANAcdor/19rKges60p76V2hJB9+6jhJWdFi9RliSTX2ftv8cgRB4GtrK/mfj87OW+ebV1YyvcgCQFKG5472je1B6ehcRky49n86F5fOYJx4SqHWbQbUDJlcMpOpFoPIFLeZD6Q9blC9+UqnkfZAQnuvwJJ/ic0ttQJw3awSIKl91udWlBFPKdw2pxCzQczLukmm9CwbHZ1zRffkdfL4wgun+V8vNQDQHojz+2Meiq2qoU7bd43/e9s0bp1TmPfep5aV5b129zPyM4osPHffHFbVFeS9f/vcIu5eUIzZoF6S0wrM2jJZUegNJ3inyX/uB6ajc5mie/I6Q5Lxpu9dXIKiwIJy64jbzCvJXyfXWGeQ+j8tBsFlMfC3G2r55/fa8UZT/NXrzXQGEyyvsmMzSiNur6Ojo6IbeR2NIzkTnN5okr5IEgG4frp7VIYZoMBq4Ecb62gPxOmLJCmwnvsltqzSzsoqB6+ezObL94SThONxXj3p4c9WVWiev46OzuDoRl5H40Q6TRLgU8+eBKDAIo3awGdYWG5jYTqX/nwpseVfol3BBL/e102TL8bSCjvrp7nH5Ht0dCYruhuko9EdTgx4LzfH/WJw0+xCFpRlQ0DPHu6lKS2Klqms1dHRGRrdk9cB1MnNbU2BAe/fPrdwkLUvHC6zxI9vUKtpf7jlDLtas1k3uTo5Ojo6g6N78jooisIv93TRG0lyz8JifvUhtajJIApcO4HCIdUudRLXYlDDR88d6dNFzHR0RkA38pc53aEEXaEEf0jnwy8os1FgkZhTYuHBq6su8t7lU+0yAWCSspftKyd0ETMdneHQwzWXCZ3BOIoCFU6T9l44kdI6PGWocpoQBYF/+MDUC7yHI1PhUOcHXGaJ+5eW8vMdHfzrrk5umX1xQ0o6OhMZ3ZOf5MSSMu+dCfCFF07zxd+fzlu2M0cMbEGZlX//4AzKHBd3onU45pRYWVvr5DvrqjXNG0AP2ejoDINu5CcJnkgSfzQ/2yQlK/xoawt//1ar9l5uu77/fr9b+//ji0s1XZqJitkg8p111dS6zUiiwAMr1Orabc0B7vzvY7x4TNe40dHpz3mHa3p6evj5z3+O1+tFEAQ2btzILbfcQjAY5NFHH6W7u5vS0lK+8Y1v4HA4xmKfJwx724J0BhN5krkXi08/dxKDCM/eNxdQvdsHNp3C0y/N8N/3dPH9DbX4okm6Qkk2THexuNzO/LKRq1knGhldnP/Y1wXAL/d0cfvcoou5Szo6E47zNvKSJHH//fczffp0IpEI3/nOd1i8eDFbtmxh0aJF3HXXXWzatIlNmzbxiU98Yiz2eULQF0nygzfVBhc3zSpAEM6uYGgsyYQrkrKaCikKAs8d6Rtg4AEKrQa+9ocG1k1RuzutrnGypp8+/KVCRsbYm9avz9WqB2g7E6e03IDRpA9YdS5fzvvqLywsZPr06QBYrVaqq6vp6+tj165drF+/HoD169eza9eu8/2qCUNSVvj8ppPaa99Fztf2RLPf/8Hf1nO4M8yv93cPWM9llmgPxGnyxvhNOlRzsYudzoeMJx9Pq1QGYimiSRkAvzfFnm1hDu4ZutG4js7lwJi6OF1dXTQ0NDBz5kx8Ph+FhWoYo7CwEL//0lIQfLfZz2/2dw86qbe7NUjalgBQ33NxDUm7P573+hc7OwZdz2ESOe2J5r1X4bx0jXxlzr5L6YFUdyhBKqmw9VW1sCsa1SdldS5vxiyFMhqN8sgjj/DpT38am230uiWbN29m8+bNADz88MOUlJSM1S6dF48/dwpvJMHtS+qYWWLX3v/1rjP8dk/WiFqNIse9MrcuvXD7/eiWU7itRj67ug6Ao/WNAPzbR5fw+f95n5a00d/85bUEokk++O+7uGleGc19YdpytN4/srSSqVXlF2y/czEYDGPyW//9bRJ/9dJRHlgzhce3NxGVrNisTsAHgNNpnjDX1OXGoX0e2pu9LFxWfFHDmRcanzdOa1OYOQvdSNLFP+4xMfLJZJJHHnmEa665htWrVwPgdrvxeDwUFhbi8XhwuVyDbrtx40Y2btyove7p6RmLXTpvvBHVGNa3dlEgqDHrzmCcf93WpK3z0PW1/GZ/N8c6fBdsv2VF4Zn32wFo7fXzxVXl/P5QO1MLzBSLUUySQDylUGY3EvJ5EIHH7phOucPIj7dmJQH+5toaVlY7Ltr5LikpGZPvnu+GFz4+F08kyePAO8c7KJuWHdkEAjHtexRFIRpRiEVlCor0EpHxRJEVdm1TH7SiMUJ55aU7Yjxb9mwL0XYmgSJEKK+6MMddVTV04eJ5X+mKovDYY49RXV3Nbbfdpr2/cuVKtm7dyl133cXWrVtZtWrV+X7VBSOWE4vpDmU938Nd2bDMyio7iyvsTCnw815LEEVRxt1b+eXuTrpy9uePJ7y0B+L4oikeWF6GJAoUWQ10BBNaKz6AynQBlDWtw24ziqysnlyZToVpSeOtR/3MjquZQkaTQDSi/paKrLDtzSB9Per8xcbbXVht+oTseHGyPpuqG/SnLisjn0y3uAwGUpRz8Y/7vK/y+vp63nrrLQ4dOsSDDz7Igw8+yN69e7nrrrs4cOAAX/va1zhw4AB33XXXWOzvBeHJA1kP8992d2lGv9UfRxLgmXvn8L+vrQFgSoGZQCw15oqIoXiKBk+UrmCCjz19nIOdIV6s97Ajp4AJ4P0OVQN+eZVqtGvSpf+F1oGNNTLS65O1QvS766q5XSqir0k15A6nSCggk0wonDga0ww8QDgkD/UxOsMQCcukksPPcwT9KY4dyM79HNkf1Qzf5UAmRBMOToxr7Lw9+blz5/L0008Puux73/ve+X78RaF/tswbp31MKTCz6WgvZQ4jxpw4W0ZPpTOYGNNiop/v6ODd5gDrp7oIJWR+k5Mt4zZLfH5lOT95tw2A9VNdWvrgqhoHu9tCpAa5vj61rIzZxVZumlUwcOEkYFW1gy7Bp702mdXfade7IeR+fWIjIRlKL+juTQo2v+inpNzA2muHHgn6fer9s3ytjb3bVSfk1LEocxZeerUY50LmgZaIT4wHmz5e7cfpvihvnFYNxbeuUuNcj+3q5K9ebyYpQ1G/TkeZNL6xTKMMxVO826xmh2xtVLOSGjzq8LfGZeIrayq0EAzAzGKL9v/VdS6mF5r5yMLiAZ9bYDFw8+zCSTsJFurnOc2cq54XnydFIqWAoHDDHer8SiQ8MbysS4mMB9/TmSSRUDh9PMaR/QMzy2LpjKaSsuy9EglPDIN3Icicp0QiXb+SUDi8L0I8fnGuOX32KYdESuEbrzRqr9dNdfHHE568WLyxX5ckd7ogxxcdu3DNE3u68l5nJlMB/nZDLaV2I7KiMK3QTJM3xrzSrIfkMEs8esu0MduXSwm/N/ugjSkyhSUS1VOMtDYlSMQVjstR5kesGE2CbuTPgXiOZ7rlFT/RiPq6rMqI0y1iNqs+YywqIwhgMgnc9uEaXnqmhWTi8jHymfOUMfInj0U5fTyGZFAdDleBhN0hUlBkwFUw/v2KdSOfw6GcHqcZY17rNucZ+dwURACXOe3JR8fOk/fH1AfGbz48C4dJZGuDn3/a3s6ySjuldjUkJAoC/3SZGvOhCKTDBL9NdhFG5qmnunnk6qm0Nqm/WZgUveEEVptIJCwT9Kew2UXECZDmdimQG37IGHiA7W8GKSyWuHqjU1tmtggIokBJiYWiEkkzfHJKQRCZtKNJb1+SoF91IDw9KQ7vi2jhmxNH1NF4V3vWIbz9o+MfOtWNfA5/POHBaZa4cYaba9Mqh59aVkq1y4TVIPLYrk7u6RcGMUoCdpM4pp58KC6zoMyqZchcN93Nmlonkh5cGxa/N4XZLhD2qTdZQlbY4w9iFiVkGYJKio5gggq7CV9fijdfCWAyC2y83TUh8pknOqfqo0Mu8/RmnZxIWM7LXModOb31WgBRElh346UppTES3t58Z+/08RiVNRc3w0Y3Gzl0hxLMKbbwyWVl1LnVLkQ2o8Qdc4u4YWYBz943hxtmDnzyus0Su1qDA94/G/yxFN//UzMHO0Mc6Y5Q2m8S12oU85pl6OSTTCp0dyYpLzfyhZXZAq//3N+NmB4R9ypJ2vxxrFZR80TjMYWgX28jOBo624Z3ZDIeaySUb+RNJlHz5AN+WZ0juUjx6fGi7UycfTtChNMPM6cre/ztLTmjfwHKqy6sb61bjRw8kRQF1rP/AdoCCbpCSTafOvcuRcd7IuzvCPO/N58BYEmlfYQtLm9kWeHk0SixqHpTefuSyCmoqDZy65xCnrpntibCpsxQaJai9JCgPRDHas+/7HNDDzpDY7WJSMPcHrvfDZFMKqonn3OOzVaBWEQhHssa9tbmgU3jL2Xe3xWmpTHBqWMxbHaRa250smz1IJX/CkiG7KjR5xn/ZvS6kU8jKwreaFLLljkX/vm9rNzB3rYgp/uGHt72hBM89OYZXjupPhjaA/n6M+unDl4hrKPS2hTn6IEoh/dFUBQFv0f1xguKVLfdahS1DKN/PdTJazEvCtAeTOB0qetkPPyO1nyD09We0B4eOtBwIsbBPWH83hTVddmsLodLZO21duYuVrOYujuSHNwdRpbJ8+QrqowoSr5H29U+uYy8nDMYtDlEJEmgtCLflsxeYGHlVTbmLMxmw9UfGtpGjBWXZUy+Mxjn268188WV5aytU2ODveEksgIltrM/Jd+7toa/26LKDu9uDVLhNGoyxC98fO6A9WVF4YHn1bZ7u9tCvHzck5chU2Y3IIl6jHg4/N50gVpzAldhjKBfRhSzufEAVS4TogBy2lGvc5to8cdxpR8EC5ZaObgngqc3SSwqYzIL7HgrRHdHkqISiauun5xx47MhlVQ4tDebeFBZY2TOQgvxmKJlhjhcklb81JKe5LZYs7+DM73egd3Zz5lM2U2plIKcPhyXW2Re+qFntojMnGfm1LEYy9bY8h6Qt3+0gFee89LZlhwwhzHWXJae/NtNATyRpOZFQ7ZjUiYWfzasqHbws1umAvDQlha+8mKDtmxv28BYfaMnlve6wRPjcKcuiXs2hEJZ1+nE4ShnGuLIcn7WhkEU+Lvra7XX66e5kRXojSW4/aMFTJ1ppm66iYBP5rUX/Bw9EKW7Qx0+B/yTxwidD+EcY7zqajtllUYsVjEv9S/3wZqhpDw7p2Qw5C83mQUiockTIsuM+passrL+JleeLtK8xVZuu6cgz8BnEFDPy+YX/RzeF6FznEY3l6WRP5pOlTzjixFOpHir0a/lptcWnL2RB5haaNEaTeeS8ehzOdCZFQorTY8cmnwxytLpkUv1ePyIBLxZ45McJqyZSXEFWFimxkjbc9Jgcw3UqWPZh6/JpI+kIF0ZDNRMMQ45YSj2G3UWFksYjfnvXXdLdlRUWmEgkVC0PPKhkGWFcHDiT4pn5nTM1rMzp7nzG6ePxzj6/iCFZTGZF//HS2dbgmRCOSd5iMsuXOOPpdjbrhrZ7nCS+54+oS0TBfKEvc6WoU5/sy+WN0LY1xai1m3iX26bTjiR0vbhz1aVk1QUVlRNLvGwscbblyQckpm72EJ3R5LeLtXKL1w2sGw+U6wGUJXWn+8IZuc/BvNCQfVgYzFZK/C5XMlo/MxdbB02t72oVKKvWzXIwiCnzOGUuP42Jz5PClmG1qYEkZCMcYhiIFlW2P1uiM62JDff7R4wGphIZETwLJazu1ZWr3NofQ+AQQ1IIF3gd+JIlF19KUxmgRvvdA9ccRgm9RX8D2+38vMdqiyvnG7+8W6TH1mBxRUDZ76XVJyfB/21NZV8bkUZ37yyktU1WUP91ZcatH041h3hUFdEM+Q2Y/Yin19mY3WNE4Mejx+SRFzmyP4IggBTZ5hYvEI17KII02YPHIUVWAzct7iEz60ow25Sz3UwnvUOHU5J2z7DtFkmFBmCPj1kEwmr1asWy/DX5NprHSxK/xaZc9ofm12issaELZ15ExrGS//jcz4tZTMUmNjefCztyefOQ2RQFIWvvHiapw4MlNV2FUjc+pGswR7MSUylD93vTaEoWcmIs2HSevLPHOrV9F/mldr42fZ2/vPumTy2qxOADy8o5kBHOG+b711Xc17fubDcxsJy9eGxfpqbPa1BbUL21RPevI5NV+Q8BH6woZb3O0JYjZP6mXvW1B+KYLWJWKwip4/HWL3OzrGDUXrTHqPRJGI0qbFig3FoI3TvomzTEJtRJJSTo11WaWDNenX7dzar8ydOt2qkxmty0BNJatLIE51MzrswguMhigI1U0wEAzJzFgwf8nQVSIgS9HYlqawxcfRABIdTpHZadrtUjl33e2Xc5ymc2tWRoP5glEXLrRQUj+25zzwIBxsVtvrjtPjjPHmwh3sWFSMr5Dlxoigwd5GF44ejAwTNFEUhHFZPRO75SCUVJIOALCsc3B1h+hwzDC0nP3k9+UwPU4BnD/cCauZLhhKbkS+uyhbNXFXnRBzjUusV1Q4+sUQ1MLkG/tqpLhaUZUcSSyvtfGpZ2Zh+92Tg+OEY7++KsGebmvHi98o0nlRDLQ5nTopetTFPDGs47EaRUCJ7xwiCQGmFMS+7wZFOsQyPsZE/1h3hzv8+xqefO8n+9tDIG1xkFEUhHJIH1BUMhcEosHCZdcTG6ZIk4HRJBAMyiqJw8miM/Tuz8WhZzjd23R3nNyHZ3ZFgx9YQ3r4UO98JkUqN7aRv25k47kJp0HDWGV82NPjP73Vw95P1A9aZNd/ClBkmYlGFYM6o5Q/HPfx618BezRkhvvYzCZob4ux9LzxgnVwmrZF3mEQc6Yst0w4vN6ulymnk5lkFPHnPLO5dVMwnloyP7mwmRTODWRL4+pWV4/Jdk4nc3rrGdFz8rdey8cu1153bvIXNJOV58hlyvTC7Q0xngIytkf/2a9muYrnzAhMRRVF46Wkfnt6UFl4ZS6w2kWhYztP1T8QVujsSWoYTqEqWnt4Ufm8qzwCOlkRcyauDiEUVXn7GN8wWZ0c8LhMJK1TWqvM9wXiKlnSm3uHOMA+/3aqtm1G3TQyiA15Uqjopx49Ete1/s78HOxJhJf+4M+chY9xzhfkGY1Ia+URKJhiXWVObb2APdKon5VNLSxEEAUEQsBkl7ltcSpVrYIrTWFBuz37uB+cV8Z111WM+YpiMJHOct/7GduVVNixnmcmQwW4U8Q4iJieKAldvdHDFOjsWq4jVJo5JY5GUrLClwZfXbQzg/+3s5JXjnkG3CSdGNmahYGpcc83jsexD1uUeDyOv6tkEcuY9OlrjvLc1xM631VFOdZ2RkgoD4ZDM1lcDvPlyIO/hPxpef9FH48k4NsfIxyAryqg/PzPaCAXU/RfNEIil+Is/NvKVlxpIyQrf3dw86LbBHCcjJStsOtqLu1zC5hBpbUzw4EtNtPrjGERwIhEg/3rwe1Nnpep5aQQGz5KesOoJzC2xIgCvn/JR5TTS5FWfkMuqLlyKolES+ND8IhaU2SZdy73xJLcEHtTYOUBRiYHKmnN/IM8usfLC0b5Bq5sLc2K1DpeoZoCcRaHK0e4w5Q5TXs+BF+v7+NXebloXDvTcH9vVybxSK1MLsxWQbf44X3rxNFPcZv7+xjptsjiDrCg8f6QP0yEJUYRbPzI+KoaZjBF3ocSUmeeWVjwcVptIMgl9PVmvPTdkAzBnoQVfPy+1pTFB7bTR//6p9MdXVBupqDay7Q01ZJtMqr1+jx2MsniFDdEAH0qHUp68Z1ZeQkR/goEUb78WyEvd/bsdZxBMgtYh7niveixui8QPr6/jq3/I1s4E4iltTua3B3p45nAvfeEkty4vYudbIaoFM68c91CcMFIlmTkpR/ApESwIOASJzm5RE9RzFUiXpydf36Oe4FnFFr68uoJf3jWD62eoN4PDJDIt56a6EHxqWZlu4M+SWNqTzGS9uAokVq9zMGv++f12c0osKIB3hHaNGUPi84wuRKAoCt95rZlv5fQjgGxf4IyDsaKfg/H1lxu1zC+ARq9aOdrki/FMei4pl2ZvjBf29wFoVZZjiaIoBHwprcnHohXWcVHozDw4u9oTQ6axWu0idke+sd2/Mzygy9dQ5Obhl1YYNMkLgFee9XGmIU5bc4JT9VG8OSqye9uGny85sj8yoDbDk8pvAZr53T+9rIy6AjO3zs4+jHtCCRo9Ud7vCGm/cYM3RtSSQlYU3ILEi/UebpDU2eYAKd6Sfbwme+lRknh6Uxw7qF4nV1wzssM6KY18oyeGURSodZsRBYFSu5Fat3rT6kqOlwaZcEFhierxjFVc2JH2jP0jdPJyF6rrjZS+19oUJxhIaSGg/r1+MxOs+9pDiAI8eHU1H5pflLeOJ2ebzmA2TvXckT7qeyI8vqtDexB0BhNMFbIPupamOJ1jGN9vPBFnyx8DNJ1SH0pDpUOeL5nfM+CT80JvmTTEZattiKKAq0AckJoYGmUYrbNNPZeFxRIlZQYkSWDlVdmEh4yueyym8Bd/zM6X/OM7bdz/zAnNWcxFlpW8OQOAUOlAh+FwOjScKXB05tTf/ODNFr7+ciPf+5MqRmgUBQ50hPnay40ESOFCokrIjlbEHL+mW4kjyer5CBiSWG0iN9wxvM7VpLJ4wVgKfyzFvvYQFU5jnv5LjUsdck4rHPuhp87YcKYxTk+nemNmSsUXrbCycLmV6iljM2eSKXZ7pykw7Homkzr5GgwMbVACvhR73wvz7p+CvPdakJqcGzORUtjbFtQ6esVTCrKiCqd9alkZmz42h40z1BzprhzD3h5I4DRLWNLFP3/5ahN/OO7lc5tOoSgKnaEETiFrMPa9F+YrLzQQHOah1RmMk5IVXjvp5Xt/ah7UeGXwplURu9qT2J0ixjGs/A3FUzR6VA/UXSRp0giCoM6zlFYY2Hi7i5s/5KZmqim9TOC6m11cdb2Dqzeqo+HQIL9JJCxr1452LH0pRAmu2uDQqnJzJQcyo7TG7pj2cDYjsFEsoCxu5JX6gXMmoaCMLMP8pVnL2xFMMKWfHMre9hACML1IfX9qwdAj0NvnZvND/UqKWrOZWyTVESiukfirO6q5f2kpX1hZTruUPcbno+ooYKT5qUlh5H3RJE3eGB9/5gT3P3OCRm+MWcX5J7XaZeLrayv58yuHSSjVuajs3xFm+5YQsqxoRR82u8i0WeYxq3jMeFSvnvSytWH4LAuHSxxWa74nXWkbjykko7BQUIfOx7ojPPxWiyZpkam6XVubDdkJgsB9i9X02tyOZO2BOFVOI//nxil535UIKzz0dCvtpxPMFW30Kgm2pFTtpU8ZymnoGVzNMBhP8YUXTvPQlhZ+vqOD9zvCPLqtbchjyg3NVFSNbbOLb7/WpIWnBEFg3Q0O5i6yMHeRhcoaE2vWOxAEYUDNg8EoUFRi0EI8mfmCXN5+PcD2LSEiYZntW4L0difx9CRxuaW8HH+rTWTJqmxltMksEA6lsBhEfnxDHXMEG1NFC9dKBSg+6OtOEvCl8Papf9ua1VFTeaWRa29yIhhgVyCAMee8ZeLty6vsWmx/Ta2DH2yo5etrs5l1BhFumV3A4pwiTD9JjImsWV56hQ1JEvjwgmJunVNIUpQ5Lkc4IodIoKi9i0dgUky8fvLZk3mv3RZp0LzzDdPPrhxY5+Lg7UsR9Kew2IQxjwfnTra+cKyP9dOGviYcTmmADHEu/Se8Mnv6s+1teW0in7hrJoF4Cme//PESm5Eal4lTfTHaA3H+7PenAbh2mouphRa+srqCn4c1ERQAACAASURBVO9Q6yvWSW4qMEEgexwtoWyY5kxXnEXVA+OzGQ91X05evrlfyDIel/H0pCgokvIyiirGsKNRSla0nPHecJJSuxFBFM5qjiWjhzOY5k3GKehsS9DTmaSnU51gnbfYwvbmAAvLbdoDvm66GbNFpLBY4vD+CN7GJGtqHSwosyGQnQeZGbDx7hv5AoPuQoniUkmrpdhi9xKMyty/tJTvv6GGX354fS3/faCHTy3NpmULgqBpUlW7TPijKVZU27VMu+9fV8MP3myhXYmzAHU91zxxwASw22LgLb+Pjy0uYduBAJ2huBalGIpL3sjLg6Q8/e11teelC69z4clNXdv5dohEXBmXtmmSKPCbu2dy/7MnERBo9ETzsltycThF4jG12YXPo052zV9qJehPpScn8z3KEqMRYgP7ABslIS/jJhe3RSIQS+YVR2WM0Y0zC2j1x2n1x6EjfzuLVSCaY5BTxwXkJcoAsbDBJpht/Sqr92wL09OZv57FKlBYPHbx+E1H+7T/j3ZHtF7FZ4MoqRPxyfjQ3uvxw9kRjdEkUFIn8a1NjQD8+IY6rQixPD1KCaZkTIpIucOIty/JKml4eWmfJ8Ws+apRlRWFU31R7p5fxNJKO3fPL2LzKR81bjPfvqZ6yM+YUzJQY2l5lYO/vLoKl1micat6/Vwxc2CyxnfXV/PmaT9LKuz89kAPbf6RjfwlFa7Z3x7iH95uzTMIPaHsxbmiys6jN09letGFzZ7ROTv83hRHD3pJJhV6u1SBsdy830x595xF4/M7uiwGZhZZONkX5esvNw65XkbeoK8nxXvpismTR6Mc2B2h4UScgE/1fudeZeGwHMKMyJXp4jf7KCUqXGaJk31RTW4DoDzHAH5meRm3zC4YoGtSPX+gkTzyfjSv01A8JfM36ck9UG/2u4qLWOpx8MKuPq1RTe7kcnm1Ghdfe51jTJttZwoSC60GtowQJnvztI/PPn+SVL/K10woZzj1ylxtl4IKia/lZDtlZE5yea3Ri0EQqLGb8Pap58FsEXAUD/37FacLl/yxFLICRWkl2U8uK+PXH5417LENx1VTXCyqsDNtlknbj/7UuMzcv7RUU7ztDo3cWeqSMvI/3NLCu80B3k9rzpzojfD5F05pyz+6qEQ38BMcT2+Sra8GeO+tHl551se2N4NsezM4oEPOjLlmrYPTeFCeIwudK1iWS1GpAVGCIzkSsJmMDFAlZt2FEj4hSVSRIQXT01LVc0sHemuDEUkqRNPysQZR4Lvrqrlldr5Qy4IyG4XG7Eigwx1jerkFu1GkYH72Fm44HuOt17LhBW9EPa7Fgp21opOFgp0SnwkbEuJpkb9NhxcEQUCU4IY7XFxxtQOrTRzTrJr2QJw3TvuYVmhmeaWdPW2hvF4O/fnFzg56w8kBmUqgeuf9NV76d/HKpL/+qq0TX86E9L62IMl+D44o6rYlMaOW0XXtTU6KC/NHXtHq7Oe81xcgJStaVtRY6xAtWGbl5rvdA0ZluWRGe4Ehrt1cLhkjH0vKJNI/0PffOEM4kcq7UH71oZmDDoN0JhZD5Z03nMhPAxxvPfcvr65gVTqG3Rce3BsyGATKK41aNkdu27YMhcUS+ztCJET12rymxsXKKju3zSnkvsUlfH8E0bt1U1TP/5bZaqP41bXOAV3BzAYRtyFrdNfNdWE3Sfz2ntlcs8hFx4wYe1IDvdRwIoUdkSskJwtEO1f0C0V0pLN6YjGZqTPM51xFPBIZOQebUWR2iXoOf76jY8haBatB3Y/+LTFBvS4yNRSKouqrZ+QuZs41U1gl8XbKx78nO+iIZsNm1S4TbYEEP9vezqm+KFsbfMiKQoeY/o64QCwqYzQJmMwicxZYqKgxEJFSbE55+K8mVUPGqyT55b4uvvTiaS2KUGwd27CiIAgjJhpIooDVIPLkgZ4RU2gvicD13rYgP9venvfefU+f0Bo1AxRaxs/r0xkbThyNam3iMlx/m5M/vTTQQA1VIDNWOEwSt8wuZFdrKE+wrD+55fBTZ5qoPxQlJsn8MebhnppiUi6FF7d5mG1QHQybIPE316ndqJaPoi/A9TMKtEK94UgmFJxuVZFzVl3+w6bCYWSz4mMFqhFPpRQkSSCUkLEx9H1RhIGAL0UqOXZ1CLnEUzLff+UYvnQNQTQpM7s464gd6AxzzRTngLCQ1Sjii6XoCCZY3O8zHU6J1jNxkgmFptMxjuxXr6fpc8zMXWzh/mdPEsjx3r9xZSVnfHGSskKrv4+3Gv281egHVGPqT6XAojYwicVkTVLZbBFZdZWDI/vCNB5RawaeSnYRSXv+ncEEp9LpoDXu8ZFEGYlIWirjH95u48nZU4dc75Lw5H/wZotWbHJVjuDXke5s6tlYxg91xoeWhqzH8cH76th4uwubXdIM+qIVVgxpp2i8vMpcMpIBgwmWZcjdD5NZZOMdTp6N9dBNgp+3dLClSTUYnnQJ5LmIaI2ELCukUlBVq6YZ9h/GlzuMRJHZnFLzuj1pqYBQPMVyMTdtM/9zb5IK2fJH9QFrLh7bfQ7GU3zkqeNsPp7VUf/Cygqm5HRee+TdNu76bT294fyJ6szhtQfiA+Ly7iIJOQW7t4U0Aw+Qcsi8csKbZ+Afu2M6105zc//SUj62uIT+vHdGPXbJKBCLyXS2JrE586+7zNdXOY0kDQp/cU02BfvJtEa8w3RxHcwGz/DNwCeckX/slR2kZIVQPEU4keJ0X/YACq0GHry6iu+sU2euMxo1H5g5PvodOvmkkgpbXw3QeDI28sqDkDthVlBk0vKeV6+zM3+JRe25mtYUz6jyjSeZydHQMHFNqy3fMrZFEoTJPhSiaW+qlwSSxIBqyLEgc96GKkzKxIRblDiyqHDiaIxUSuEf32mjMl2gVVQqsfF2F7NztN5t6aIqj5DgS39sOGvxr+H4/KbsXNnUAjPfu7aGuaVWJFHgq2sq8tb9j71ZOd0tDT4tO+m5I3186Ml63u/IZh5Nma4eT//z/MiONv41Z/L68TunU+nMethmg8j9S/OVZjMTsaIi0Nmqfl5/GYXqtHDh51eW8z8fncOVdfnVpbnRhIvFSKny427k9+/fz9e//nW++tWvsmnTphHXj5/YwTOv9PLA707x168384307Phnl5fxr3dMRxAErqh2aB7BLbML+PLqimE+UWcs6GxP0HQ6jt+b4uCeCMcORrS2e6MhHpOJRRWcLpGrr88PYxQUGZgxVw1BzFti4aYPXph2bxlPPpwY2pPPNKSunpJuHZiOE1+djqW/ckKdF/rRDXVUVBtpb0mMqbGEbLZR/76pGWYUWbh3UTGCCCFzip7OJC+/6FOrbFGonWHiqg1OLFaROQvVSb1c3kuqxu5k3/Ae4WgJJ1LaOZ1X7uBnt05jRY5208Z+4alc1c1Ht+WHZSGr+wMgSgJzFw+cG8l98D55zyzKHQNDKOunqga5wmGkMt0K0mYUSeRk5Myal5+OeMMMNz+9eWpe6O25++YAUGY3XFTZ8JHmezKMq5GXZZknnniC7373uzz66KO8++67tLQMbGw9gN5O1oRP4vYaMCJQhAHxgEhTvXqDSaLAN9Mnd5Uu/DXupJIKO98KcXhfNsvkxJEY294MjtqgBf3pm36JVdOjGQxRFMa0lH44HCYRAfBEh35YGY0CN97porUgRqMnSihtvHLDDovLbcwvs1FUaiARV8ZEojiXaDoff7D2cgCiIHDf4lKmFprpTaSPJQbTBQsmQcTVL0vJYBC4/tZs2DOQ1ivfPkiK4bnQ6s+G5T4wd/BmODfPyhr6SFJGVhRezpFezo1IHeoM89sD3dq1NmW6CbNFyGvZGE8nmVoMwpAKkqV2Iw/fUMejt0zlu+tq+OqaCn77kVksX6vmzk+ZYcLUr6evIAjM6JexJ4kCj90xnZ/dOu2itupcXuXgF7dPH3G9cTXyJ0+epKKigvLycgwGA1deeSW7du0acbtO758QIydZKpiYI1iZI6qTNfWHolpXl6mFFp69b86oJrd0zo/cop/CkvwbaPe28Kg6yGdK0Ucr23shMEpqEUyLL46iKPxyd+egui6eRJJf7uni6y83al7nLbML2TBd9QxvS2uPZPLq398VITWKczIamk7F2L5FDVeM1KFpbqkVTzz7wFqWjscPNqlqc0isutnKi8le/Gm98hb/2AidZSpb75hbyAcXDT7K/kJOV7bDXRHePO3Twi1Ok8hPbprKh+YX4bZI7GgJ8j8He7XwrMkssvF2F7fcPbBauX9mUn/mldmwGSXqCsxsnFGAIAhU15m48U4XC5ePPjuv0mkaVo74QlHpNPLhBcNPqIzrHdfX10dxcXYHiouL6evrG2aLfNo9rzLDrrCsLFuunSlYAPSG1xeIjGd65QYHV/XryNTRovbOBDhdH8XbO7hXHE0Pic1DeKMXi2mFFt5tDvDycS8v1nv4y1eb8sS+OoNxdrRkc89/lY4f24wiX1tTycM31nFFejSZKV7p7UrS2jw2BvPA7uxDxzrCZPQ1U1wclENsTnmIKjKudMx9qMyZCpeZTtT49+oaR16ruvOhyauqwH56WRmGIVRf+zfOyYS9AL60uoIZRRY+tawsr1I4d4JRFAUEUWDtRjvRGdlrLhOSOVvMFnHYvPSJiigIA+Ya+jOus1uDDeX7Z8Fs3ryZzZs3A/Dwww/nLUskvdQ176Ng+lq6UIfH294I8pmvzBynPdYZjJ4OHxCiprYEu8OA1RYkEs4awt5uGZeriMP7TyMI8OkvD/x9Go73IIoRqqpK03nABkpKBmY8XGhumC+z/UyAx3dnJ+28WJha4uZoZ4AvvHAsu+6cUl6vV418Wal6Y5Xm3F8uZ4qMuMzp+gTLrxi6tH00qPdP1viVlQ9/MxcXK/x5wsg/vHGS+UqCKkG9Z2pqSzCZB/c6180ooqkvwtzKQna0nEE2Oylznp9Sa3u4g2nFNsrLSof9nT+0uJLnDqgx+BO9qgEvc5i4Y9k0zU7cvCDKL95pBCAmWgZ81u+ONfJf9WqWyw9vmcs1M4p1568f42rki4uL6e3NCv709vZSWJhfzbdx40Y2btw4YNt5i5Zy9OB+AtZiLP4YpVV2bUa9p6dnwPo640d3VwRBhHDYQyQqsOpqK82n41pT7WQyRcPJLgAUBdrbugfE1RtO+ikolrTroaSkZEL8jvPcAx2RbcfbqTEn+I/t2f6cU9xmvrKiSDPyg+17rlMT8CfZ9lYLs8+jyUl/bZzRnK+r0h20OklQlXaM/AGPJmzWn2+tUWPmO9LphP/+7kk+t7J88JVziCZltjcHWDfVNSBEcrIryKIKGz09PcP+zp9c6OITC1z80/Z2LXf9oQ01eTbjxjoz7nXV/P1brbT3+th8ME6TN8YNM93YjBId3uyBTbWl8PYNbLRyOVBVNbS67riGa2bMmEF7eztdXV0kk0m2bdvGypUrR9hKvWBqK1SvpSu8jzOhepxuiWmzTEiGgd3cdcaXcEhtgZeRbHUXGli0wqal44VDMgF/rmefH7JRFIVwUKZomAnXi4XNKPHCx+fywsfn8su7ZgDwu8O9+KNJrYgHoNRuQBAEfrixlj9fO3hGhSAILFxu1bI/6g9GzyvTJhMmcxWIZxUvBtgvB0deKYcratSQU/9MozZ/XOtPG0/J/PGEh5Ss8JN3Wvmn7e1am7sMvz/WR28kOUBffTAEQchLogC10Xr/ddbUOrEaRPyxFL/Y2cG/7+3iGy83srXBx+ZTqg7Oj2+oy2vMoZNlXO86SZL47Gc/y49+9CNkWea6666jtrZ22G2ubTnCkaIqpjuzF7U/fBSD4QrchTYaTsTp6UxSVjn2CoU6gxMJyYPGdecstGK1iby/K6Jpq4MqQFZaYSCVVDCZRRqOx1AUsFgmzqTrYJTajayoUrVV7u8nX53RullUPny7tWmzzKSSilbZG48pgwpNjYZwUDWuK6+0Yz8LLZmNM9wIwOop9gHCZkORySLJ7VLljyb50ounWVxh46Hr63jucB9PHuzBahA51aemNXoiSeIpWeu49sQedUSXyS8f7Xdn6K+QmcFplvDHUtr+dQQT/DQn3TKjLqkzkHF3rZYvX87y5ctHvf4CTysLPK0IRxbmvR+Le3EVOIkmumlo6KS4dDaRiDwqIaV4XKanM0lV7cUpP77UCYdkyod4qGaKltrPJLA7RVJJhVAwxdH3VaXGDbc4OZyuTJxok66DsTxt5DMsqbAxo8jCRxaOviRUMgjMmGvm1LEY3r4UjSfDLFllw2wW6OpIUlZhyGtk0Z++nqTWnEIUzz4j6atrzi1322WW2Nse4mBniEXldp4+pIY+DqQFATOCYb/Y2akVgf2ft9twmkT+6dZppGSFReU2DnaGtZHBaHn05qkc7goPGU+vcBrZmg7p9OdbV+mNgIZj4o2f0yi/+xUls9bSY1E9p0S0G4Oxlk7PG7TvjhGPWvF2u/jAB12IYr6gz6n6KAaDwJQZ6pBxz7therqSFN5umFApfBMdRVF46Wl1OGx3DX7eHE4Js0UgFlUoqzDg7VObQLd0q1kbb7ycjZm63BN/OJ3bpQegymkatAHNSFTVGjl1LMbOt9UHRktTnFPHYsRjCiuvslFZM7TDsfvdkCaZW1ljRByHRtqDcc0UJ/vaQ/xqbxc/vXkah3M6VkWTMif7Itr/uQTiMg88n61wXVllP2uZkelFlmEVZP9sVQVffvH0oMvWnWNGzeXChLZ495zYzrSyDwOwbfc2Xvz988iKOkw806y2MNv8ez9/fM6ndXBXFIUj+6N5qWeZUMJYF6lMZmQ5a+ABKqqHDo9llk2ZacZmF1V98n5xghVX2rRuOhOZOreZFz4+l/sWqVkcxnM0sP2diaPvRzUp2+OHY8PG6nPb341ld6aRuH5GASur7Jzqi7H5lJfTnhjF6RTGZm9MC9H0p/8pco9Dw55ql0krkPqrddmspX/4wJQhttDJMOGMvPgXPwKDepGIH/ok181KZ20ArW3ZbId4uhQ7lVIzOjLyo5k4JqgGX84RdojoRn5UHNoX4Q+/y2/sYHcMfanMX2LlxjtdOF0SVptINKKec6c7u81w209EUmkjXHYOHYxgeBVNvzdFZ9vQVba5D4gLIdSWy+y0XPc/v6e2orom7SU/dyS/vuXRm6cCatn//71tGssrsyOgTy8bPtXzXLknHTJbVmnnpnTFbKVDn5sbiQkXrhHmLEL84WMo+3cirLsRe/Npbmg+yOt1i7R1JNFKMpmfExYOyZgtQl5PzmhEyavG1D35kZFlhYbj+R5bUYk07PDbYMw2X86tylxxpZ0tr6i/03hI2Y4nt80pJCUrfGDWuYnfCYLA9DlmGk/EqJ5i4kxagXPqTBONJ+N4+5J5o6OO1gS73glhNApIOXeleZwll/tT0c9oXlnn5PWTXranUyz/fG0l0wrNTC20sOljqoaLIAh8f0MtBztDNHpiuMap9ea9i0q4e0ExJknkcyvKuWte0bh912RiQp4hobgM4frbAFCq65jttjPj0J94fvXtJKQ6orEw0XgHMfZgkOcjiVa2vRHEahOQcmLz/RstXwqe/P6dYeSUQlWdCYtVoKAo/ydS0p3ux4tMgwyAumkmWpvjrLxq+IySXHKNud0hap18jKZLy8i7LQY+eQ6x+FwWLLWyYKmVWFTWjPyiFTa6OpKE+o04d72jxu4TCYVEjvLueOvq96cirdxoNYj8cGMdM4stzCqxsr89hMUgcNUUp5ZJ0/86XFRuHzH76HwQBAFTOjZklIQ8lUmdoZnwd55gsSH++Q+QFIWPTKvg9js3YJScyEqcts7DNHf/jnhSrQqMhBWCfhl3oRr77WhJaDeXzS5eEp78mYY4rc2qV/f268EBy1562kdiGP3z8yXzYFz/ASdLrrBx891uzGeR+lhcZsDuEKmbbkIUBdZ/wDlAdfJyI3P+Mo2xzWZBi8+Det0OxYUSa8uQCX8IAswsVidCM6GY/31tjWbgdS4dJqQnPwBb2kiEgrgLDVRWFeLLSWNu7f09U8o+hiioh7NwmZX9u8I0pw28u1DC4RTx9I59Q4exJLfTfH/klML+nWq2Q/PpOLXTTZjGwTv2e1MIIjicg3trIyFJAtfe7NR0QKw2Uc9oAm6806WNMg1Gge6OJImEwqljUW30Uz3FSFmFkaZTMeYvtSKKwgXXU3GaJe6aV6Q1JAe4fW4hc0utenvNS5RLwsgLkgRWO4QyvRwLOJZfq4K16AAxj5qP73CJ6SwP1eOdvcCCpzdJ25kEsqxMWCGi/s2sQW3lJgpwqj4bJz/yfpTTJ2LccPtAFb6d7wQxm0WWrBp9cYicUti9PcT02WYC/hQOp3heaXsT9fxeTHJHQxl5jvd3hmlvycZmZs2z4HRL1Ey9eGEIQRD4zPL8MJUoCLqBv4S5JIw8AHYHBNRiiMrKSux2O6FQtmglFPJpB2MyizhdEt0dSa7e6KCw2EAsKqMoquStzT7xUvmGkqZ99Xkf1VNMAxp0RMPKgPi8LCtah5vSCsOoi7+6u5J0tiaJhBQE4cJndFxu1E030Xw6jqefYue5Vsbq6AzHpXM3l1WitKld361WKw888EDe4jNnzlAzw8uKK1UPds5CC1ddrxp4yDZkzk2xnEhEo+p+zV9qYd2N2aFyKqWGZ0KD7PfBPRFNpx3yJ5oP7Y0Qi47uWJtPqWEtgwFiUXnCyw9c6ixYqnrFmVRTUCtbL3T8Xefy4JK5m4W6GdDSiHLyiPbevHnz8tY5cXqn5r0ajEKeIFYm7jlRJ18zN7zLLeEulFh19cAshf5piE2n4pw4kg3xtDRlh/6xqMJrL/iJjzBJm0woWtppMCATjSqXhPzApYw0yPi5sMSgN6PXGRcuHSN/zQ0AKGcatfc2bNjAPffco73u6Oigqalp0O2tNhGEiWzkMy3e1J+kuMxAeZWBdTc6KCqVWLzSyvW3ubjpgy7mLcmWfydzmmN3dyQoKTcwa35WAdDTM/xkc+Z8mC3pjA+FCakWOZkYzJjPmHN+Gu46OkNxyRh5SsrVMa03W3knSRIVFRV88YtfZM2aNQC0trYOurkoCqCovUn93hTBwIXNtFEUZdBSdkVRkGVlQB9Po1HgimscuAsNXLXBqenwGE0itTkTc92dSWRZYc+2EEG/jMMpaimkoIZtMt/ddCrG8cP58rcZI187LfuZZZW6kb9QLL3CRlGJpJ9znXHjkjHygiiBqxDlyL4By8xmM1dccQUFBQV4PJ5Bts5n66sBtr1xdnrb58vrv/fz/q6B/UPf/VOQLa8E8HpSGIz5uiVDYbaIzFmoevOxqMKebWHaziS01xXVRtZca2fqTBPhkMxLT/t46WkfB3ZHqD8UpaVRXVeRFU4ciSJK+do0ethg/CmtUI167TQTV13v1M+5zrhxyRh5AOGKddB4AuVMw6DLy8vLaWtrG1L8ac36bJw7o/IHalZK/y48Y0l7S5xYVOFMQ1xrRA5qRo2nN0UoKNPWnKC80jjqm332Aku26CtHyqF2uglBECgtNzJ/yeBpby2N6kTr4f0RvH0pps4w4y6UKK0wsHrd+FUs6mRZdbWdG+/U1RN1xp9Ly8ivvwkApfnUoMunTJlCJBJh27Ztgy4fqtv9nm1hNr/oJxQcnxDO3u1ZydaDeyKqSiPkdVMCWLTy7BofZDKJMixZZc3TfZcMArd+xM26G50sWZU1+D1dSWJRmYYTqrEvqzQgigJr1jv0ZiwXCEkSzqqSWEfnXLm0rjJ3uj+s3zfo4pkzZ2I2mzl06BCp1ECD3b/y0tuXJBqRNU+4u31oZcDhCAdTdHcmhlzuTOuomy0CZxrivPMnNVSUO3qYv8SCcRShmlzsDonqKWmZ3xkm6qYPnLwTRQF3oUTtNBNXXGNnwTLV2B99P5uVoxsbHZ3JyyV1dwtmC5gt4M92sFcajqO8vwsAg8HAhg0biMVidHV1DdhekgQWr8x6tAd2Rzh9PEYmQuL3nZsnf2BPhPe2hGg8GcvLWwd1YjUSlqmbZtIqGeMxhZ1vB9n9rurh33inixlzz63hc2bCdKRCGkEQKK8yUlquxoLPpEM2C5db8ySBdXR0JheX3t3tKgCfmmGjdLUh//gvkP/lIZSeTgAqKiqAoTvbT5lhZuPtaixUFNUS8+IyAwVFUp4C43DEY/nrZRpXH9wTYd974TxDHwrIxGMKBcUScxdlDXmunvj5KA2WlhtZvd7OzHmje0jkjmaq64xMm2XWJ/10dCYxl56Rr5mKcroeAOWNP2hvZ7JuLJZ01kls8C42oBq6abNMeD0pAr4UrgIJh0scVVplS2OcVzf52fZmUJvgFXPOYk9Xktd/79cMf3s6FFRQJCGKAjVTszFvk1lg2WrbeRvZsgoj0ii1ZgxGQaus1OULdHQmP5fcXS5MmQm9XSixGErjCZgxF8xWOHoAJR7DYDAgiuKwRh5UZUpFVrtKudwSDqdEJCzT2+sddH1FUXhva5B9O9QQS29XkqPvR/F7UyQHCccHfCkUReHYATX2bXOocflMRe6CpRauvcl5UcSoMmmaemWrjs7k55Iz8rjUTj3y330NTh1DqJuBsHglyu53UP7rFwiCgNlsJh6PD/sxuZk2TreIwyUSiNTz3//9a44dO6Yty3jr4ZCsqQdmOFUf49Be1eiv/4BzgBRBrk54ZlK1vMrIDXe4mD7HctEmPDMjD92T19GZ/FxyZXaCw6X2iO5qV1/PXwKLV4GioBzai6IomM1mmpub+Y//+A82bNhAXV3dgM+x5cSmXQUSkiQQS/QC8Nprr1FVVUUiZuO9LUFWr7MP2diht1sN8VisAjZH9nTGooqWKpmbvqiue3GNa0YJWM+q0dGZ/Fx6d7mh33NpyWq1Gnb2Qgj4oK8bs9mMz+fD7/ezf//+QT/Galfj8utuVBtc2BwiCllPPRKJEPClkGVVCKzpVDb8s2j5wCIjQg1rYgAAIABJREFUo0nAYBBYsVbNXQ+HUlqKZHHZxHqWmtMPGaOeEq+jM+mZWNZnNFTle+WZSUth+mwUQNn1dl7FayCQ3/A7d7uFy7PFRJIkkJKz68ZiMa0JeEdrAllW5YunzDRhNotIRoHD+yIk4kreflTVmWhuiOP3ytgd6rKL7bn3Z9lqG82n47gKJp6uvo6OzthyyRl5obgM6d9+j7J/BzhzOiPVzQCrDeXZ/2TpnZ/mtXSafG5jkaEIBALYbDbiST8OWyXBcDvRaBQ5rfAYT0SQRBNOt4jZLFJfX8/BgweZM2cONtMsgv0qV10FEqeOqUJoJrMw6syXC4XFKjJ7wbnl5evo6FxaTCwX8ywQlq5GmDE3+1oQQFI901lHdvLVr36VNWvWEI1GaW9vH/JzGhoa+NWvfsXOnTuR5SQWUzGgevKJuIIsx2npeZ52z2s4XBKyLPPqq6/S1tbGm2++iSK1sHX7E3R0dGif6XJnPWSH65I9xTo6OpOAyWWBhPThnDgCyQRFRUUA/O53vxtyk0zMftcutWrWZCgBIBgM0ngyTiTegUKSWKKbw0d28fTTT+dt//LLLwPw+uuva+9V1Bi1XXE49ZCIjo7OxWNSGXnxy3+VfdHVTk1NjfZy7969g6pTRiL58r+SUEBZWRnNTaoufTyZ1a/fuXOnJpdw9dVX523n8Xh4++23efvtt9m3bzdz0uGQ0UgH57Jr1y4ef/xxuru7z2o7HR0dncGYVEZemDkf8a8fUV90tmGxWFi4cCEA77zzTl7+e4aBRt5JUWERfX0+kqkg4UQ9brd7wHazZ8/GkM70KS0tBWDfvn3s27eP7du3a5LC/ZOBhuLw4cM8+eSTbN++nWg0Sltbm7asq6sLn29wUTYdHR2d4Tividff/OY37NmzB4PBQHl5OV/+8pex29WCoOeff5433ngDURT5zGc+w9KlS8dkh0ekvBoA+f/9PeI/P4XXm61g7ejoGNAXNrcy1m5zIQgCJpODRDJEKHaCeDzGrbfeQiAQYPPmzQCsXLkSh8PBZz7zGcxmM9FolE2bNuXp5Thc6fTJ0tGd4j/96U95r3ON+lNPPQXAHXfcwa5du7jlllu086yjo6MzHOflyS9evJhHHnmEn/zkJ1RWVvL8888D0NLSwrZt2/jpT3/KX//1X/PEE08gyxemt6pgzaZFKtveYLFbfW2zWAiHwzQ3N2t9YBOJBMlkkjVr1nDNNdew/urb1f1P9yTpCxzE6XRSW1tLVVWV9rlr164FwGq1IooiNpuNe++9N28/+nynuPFOFyXlIyejDxaayaR+5p63N954g/b29iH72Oro6Oj057yM/JIlS5DSGS2zZ8+mr0+NX+/atYsrr7wSo9FIWVkZFRUVnDx58vz3drQsXa3+7Wpn2lO/4CsHN1PadQafz8emTZt44YUXAOjsVJUrS0pKWLZsGUUlaljGYZ2ufVRZWRkABQUF3HXXXXzuc58bVFBMFEVuuukmPvjBDwJq1s5oK0oPHDgAwJ133smXvvQlqqqqiEQi1NfXc+LECW29YFDVoR+qj62Ojo5Of8YsT/6NN97gyiuvBKCvr49Zs2Zpy4qKirQHQH82b96shUEefvhhSkpKzn9nvv8ovd/6NEL7GTLaYa54hI6cEIjVaiUcVnVnFixYgN1ux2pJAkEkMZtDPn36dG2fRtq3zPKmpibq6+tHfSzxeJzy8nJWrFgBqA+Urq4uXn311UHXP3r0KB/+8IcxXsIlqwaDYWx+a50Jjf47X3xGNPIPPfRQXlw7w7333suqVasAeO6555AkiWuuuQZgyB6rg7Fx40Y2btyovR5KB/5skQtLUfa8q712xyPEElm5yMOHD9PZ2YkkSYTDYSKRCIqiUFVrZOosM63PmojH48ycOfOs90kURSKRCN3d3aOSEe7r68PlcmnfI4riiN/Z2NhIYWHhWe3XRKKkpGTMfmudiYv+O18YcsPJ/RnRyP/N3/zNsMu3bNnCnj17+N73vqcZtOLiYnp7e7V1+vr6tJz1C0Z5+qDtTsSf/hrXX3w+b/FLL72ExWLB6XRmpREEgRVXqhOa9957L8lk8py8ZYvFgizLxONxzOaBLfn6EwgEqK6u1l5brfnaOJIkUVJSQiKR0EZE+/fv57rrrjvrfdPR0bm8OK+Y/P79+3nhhRf49re/nWfMVq5cybZt20gkEnR1ddHe3s7MmTPPe2fPirJK9a/VhiBKuOcsGLBKNBqlsrJy0M0LCgqGHGYqifiwo5WMkX7xxRfZsWMH8Xh8yInnWCxGPB7H6XRq782fPz9vnVQqxUc+8hE+9rGP8dnPfhaA48ePn9WISUdH5/LkvIz8E088QTQa5aGHHuLBBx/k8ccfB6C2tpa1a9fyzW9+kx/96Ec88MADiOKFTckXStQ2gBjVphyF67IhobXt2cnMdevWndXnKrEY8pc/jPLiU0OukzHybW1t7Nixg8ceeyyvIjaXzGSqw/H/2zvv8Kiq9I9/zp1MeiWJEEISSoDQpEhfigg2RFFs2HZ1xYrirrq7rD/XsuqKrmUtKNhQ7K4u6oq4SJeidIQAoQVIQgnpPSS55/fHzdyZm5k00sP5PA8Pkzvn3ntmztz3nvue9/2+gea2kJAQi6F3RPFomkZgYCDjxo2jtLSUkpISt+MpFAqFKw1aeH3ttdeqfW/atGlMmzatIYdvGFFGtquYZIRF2vwDuW7/L5zwD6FvVhoZfoEMOnUU+6+DYdjYag8jKyrgwB7o1Q/9zqnO7UsXwRU3eNzHUWfWlaSkJC666CI3H70jVNJ1Jg9wwQUXMGbMGLKzs92SsRw3keLiYjfXjkKhULjSrjJeXRHBoWhvfoU27hJjg58/kSX5DMhKxRbZkYvHj+ecknzk4i9qPI789lP0Fx6BxG3WN0pLkMdTjTKEla4YWVqK3LOjWj98WloaUkqLm8Uxk69q5DVNw9fXl6ioKPz9/S3vuRp5hUKhqIk2JzVcH4SXy6JpYLD5UntmPkII9GNHkeuXI6U0Z9iyqNCIytmzAzH+UuSyr43tKcnOY4WEQW42+mP3GueZNBVx/e3Iz99G/rQU7X7Pi9V5eXns2bOHPXv2MGvWLMAIPQXqlcGqjLxCoagr7XYmXxXh7zSipsskoiOUFEPiVmRpCVKvQH/gBuTC15GbfjJm8JW1YuVhpx9f++sLlmPLZd8gdR2ZZWSuyp1b6NevH3a7nYkTJ3LttdcChmtmz549ABw4cICDBw8CRvhTfdYslJFXKBR1pV3P5KuiPfWG5W8R2REJ6K88iZh4OeL8ydXvvHW9cYxHX4JQ93BQuWElFBvJVfJ4ChNvupuJEyea7wcFBVl07R0SxUC9QyF9fY1kLWXkFQpFbZw1M3kA0akLopNTfpiIjuZLufy/6J+9Zd1h4HC0h55GjLrA+DsuHmJ7IGw2w9i7ID9/Bw4lGX8cT3E7d9++fTl69KjHfoWGhtbrc3h5eeHt7a2MvEKhqJWzysi7ERkFvi7RKYnbwOaF9sDjEBiMdtsfEAnnmm+L0Rc4E6fi4tHu+xvi+tuhZ18odikzmJeDLLTWlu3atavHLlx55ZWm/k998PPzU0ZeoVDUyllt5IWPL9o/37du7D0A0f88bC9/hAgwYtfFpVdDwrmIEedb9x84DG3SVMSAYc5tkw3/u9y11fh/yzr0D+fi7+vUw3GIng0dOpTYWGth8rqijLxCoagLZ7WRBxC+fogplTLBPRLQZj7i3iYqBttDT5tG341gp7tFTL0RQjsgN/2EzMtBn/cccs3/8N24ymzjiKNvSMaqMvIKhaIunFULr9WhTb0ReenVYPeuk6BYVUSEsYALIDSb4bvfsRH9od86z3FgD+BPbGwsgwYNIjExkYSEBI/HqwtSSjIyMkhLS7Po3igUiqalpKSEkpKSeq+ltRTKyFcivGsXEquWnn2gRwJitBFNI4aNRe7YaG2zdT13vfghXgGB2Gw2Zs6c2YDeYtaa3bFjhzLyCkUzsnDhQkpKSsxcl9bOWe+uaQyEZsM2+3m0cRcbf/cfYm3QrRcA9t3bzmiR1ROXXGJk8tZF5VKhUDQerppRbUEkUBn5JkAEBCGGjTVi76+6Be3Pc8DHF5L3Ndo5unTpQmRkpCmLAJCTk8P27dsb7RwKhcKKq4E/fPgwb7/9NocOHWrBHtWOctc0Edqdf7JuiOuBbEQjD8bia0lJCVJK1q5dy7Zthr5Oz549W22hb7lrC3SIBFUtSNEGca3HvHPnTkpKSti3bx/du3evYa+WRc3kmwkRGw/J+9B/XtVox/T19aWgoIA333zTNPDgVLZsLmRpKRVzn0FuWV9rW/2VJ9Efv68ZeqVQND6uM3lHYaRjx45R5lJ1rrWhjHxzEWzIBct3X6qlYd3x9fWlsLCQ8vJyy/a8vLxGO0dtyFMn0Oc9C9t/QZ83xy0JzNLW5UKQrfiiUCiq43SllhU4r7OCggI+/fRT5s6d67FUakujjHxzERZuvtQXvo48kdbgQ/q6JFgNHjyYMWPGAFhKLzYlsqQY/ZE7oTLxC0B/373GgDx1wniRl+1sl5vt1k6haO24GnlwVnHLycmhoqKiWumSlkT55JsJMXw88sdv4Ogh5E9LkWt/xPbWNw06Zp8+fbDZbPTt29f0wSclJVmE0Kpy8OBBKioq6NWrV4PODcC+Xe7btv+MPJ6CiIoBQG5Zjz5vDtofngQv58+tPOUQxDRzSUiFooFUNfK9evUiNDSU9esNV2VrjLZRM/lmQmga2uznwaFx3wg/hpCQEIYNG2ZZZI2KiuLkyZPV1pRdvHgxP/zwQ4PPDS4zdEB77XO0RyolmNOdNxm54xfj/8yTltyBkjWeyyEqFK2Z06dPY7fbSUhIwGazER0dTVhYmPl+YaFTwyorK4uioqKW6KYFZeSbEWH3Rlw/o0nP0alTJ8rKysjKynJ7z3WW0Sg/voyTYLOhvfIpwtfPlHeQeU6/pMw0krYQGjJpJ3TvDZ2i0fNzqHhsJvrC1xveD4WimcjNzcXb25tJkyZx5513YrPZLJmvRUVFVFRUkJyczEcffcQnn3zSgr01UEa+mRHjLoaO0eDl1SSPdg5dHE8um+xspx98wYIFlJaWNuhcMmkndO3pLMgSWFmL1sXIc9Loh8NVJXr1h8go9OxMOJ6C/Glpg/qgUJwJMj8X/bvPkTs21fk6PHToEIcOHSIuLg5N07Dbjady1xrMycnJzJ07l//+979AI02mGogy8s2M0DTE2IugvBxKG19gLCQkBD8/P06cOOH23rFjx8zXFRUVzJ8/3+OMvy5IKSH1CKL3AHOb8PEBvwDIzkDu3GxU08qtPP7xFOjeG3HFjYjgEMoPOXMG9HXLqfjrHci01rdopWh/SCnR//Ew8puP0V9/CvnRm7XuU1RUxHfffQdAx44dLe95eXkxZIiR5d4aRQPVwmtLEOSY8eaCr3/NbeuJEIKIiAiPxtuRHdu7d2+SkowCJ0lJSYwaNarOx5dZp0DXjdm61MG/StJV13jk6h+Qq939/tpVtyDsdmSPPrBuufOY779i/L9pDSL65jr3RaGoL7K8DP2eq63b1vyAPHcYYuAwt/YFBQV8/vnnFl97hw7uleHGjBlDaWkpiYmJdO7c2TKhys7Otvjtmxs1k28BRGXMPE0URhgUFGSROwBj5r5xo7HwefHFFzNr1iwiIyPZvXs33333nVusvSeklOh/uR39r3egP1uZ0etnvUlpE6+w7hTbA+2VT9Gee9cswCLGXOj5BEUFnrcrFI1FtjW8WEy9EcCY0esVyAO7Le8nJydbDHxQUFC1goCOOhEREREWP71rlmxLoIx8S9ClK9i8kNs2mJv0DSupeOH/GuXwQUFBliSp5cuXM3fuXLd24eHhFBYWcujQobq5bYo9+BerPIlUnQ2JYWMQ/gGIDpHObS5yzuJK58xdHjlYex8UioaQlWH9OzLKfCkXvIL+3GzDzYgxqVm5cqX5fo8ePbj++uurPXRCQgIjR45k1KhR/Pa3v2XGDCPIoqVdOMrItwAiNBx69EYe2GNuk++9DEk7LZEpZ0pQUBBgPGrm5uaSmJhovhcTE2O+diwcAXVKy5YFebzV93x2hDuPIfzc3U3iutsh/By0+x5FXHSVx2N5xVZqfbgkiXHkILLMGYcst/9iJI4VFrjNsBSKM0FmWWfVYtAI0AwzKB2SIwVGJmvVmPjLLrsMf//q3at2u53hw4ebyrB+fn4IIVp88VX55FsIERePXPk9srwc4ZIkxNFDUFWquJ4EBhoVrBYuXGgafIBBgwYxbtw48+9evXqxc+dOwKrJUR1lebmU2bxY27k3AzMri5VXVLi10y6cChdOrfFYYU/NJfNAEoRHIvsOQgwYahRDP3IA4vsavtO5zwAgc7Ph100Q0RHtmfkITc1NFGdG4cnj7OjYgyG/v4c9h48y2O6N9vQ8I3MbyPH2Jyclle79hliM8y233FLvcwkh8PPza3Ejr66WliIuHsrLjDBCl3R/+evGGnaqGw4jD06xsrvvvtti4AGio6O57bbbgLo9UhbnGC4dTQjEiPGG26ln3zPqoxYcgojtjggIwvbHvxszKkD+9CNSr4BjKc7Gv24y/s84Cafco4aaE7l7OzLnzCKSFC2D1HVk5in0D99gzYHDbD2nG//+aQPrdu3m8OHD5tOkBL7qMZTF+4+QlZVl+uIvv/zyei+cSimRUta5TGdTunSUkW8hRJyR0i8Xf4HctM7Y6GU3ZvdFBcj8XGTJmc0AwsLCGDx4sPl379698fb2dmsnk/djf8iYoRQt+y8V/3q82mMePHiQ5MOHAbDZbGgzHsL2+KuIgKBq96lfpw3pYbl+OXLzOqhG6EwebX7tbpmfiywvR+o6+suPoc/5c7P3QVE/ZH4uMjsTfdm36H+8CX327cg1P6BXris5ZtfHjx9HVGahF3t5U+JlXCeHDx82gxdc4+BrPOeRA+hrjUxuufB19Dun4u/vX+tMfs+ePbz99tvs29e4UuQOlLumpTjHWPCRW9Yh7N5GtmilP15/5mFIPwbRcdiecBf8qg0hBGPHjmXEiBF4e3tXm+yhL/4cu9Sx6RWUZJ6CEwcAqJg3h+T8IjrPnI2/vz9lZWUsXrzY3M/LxZffWAibDQKCDOOenwc246cpfjMJuW4ZYuxFyPXLIXErDBvT6OevDllRgf7gLYhRExDX3m5sdGTxKlot+oOe3Ste0pD7cKxBHT58mNGjR3PKN5DTNufvet26dYwYYTxdBgcH1+2cTz8IgOwzCFlp7P18fT2qwhYVFZGdnY2/vz8//mi0/fXXXxtHU6oKjTKT//bbb7nuuuvMDyOl5L333uP+++/n4YcfbvWVU1oCoWmIC6YAIBO3QkgY4pZ7jTfTK2Ns044gd2w643M4Zu+eipPLstNQqSXjW1FGic1ou3/vXrYeSeN7nwgz+aPqj9RV/bIx0Z6ZZ7woyENWhlOKy29Am7cIcctM6BiNXLcMWVr7+kFDkUm7qJg13VgjAOSGlehP/6HJz6toGPJ0KRX3XVft+1ona/hjcXEx27dv54ueI9kc1dPyXkZGBkFBQXh51T4XdpXO1v/vLvO1v5fNnMnL/FwzgOCTTz7hq6++skS1HT9+vMZQZkdClqdEx5posJHPyMhg586dRLhU+tm2bRsnTpzg1Vdf5c477+Sdd95p6GnaJeKyyh9jfi74+qGNu8SQPXBBf/2ppjl5xknzZaHdl70dOnNas7Fk6VI2VP7YT5w4QUVFBbnJByy7Nlad2qqIgCAIDEbu3QEFle6agACEzYYQAnFJZRJL6uEmOb8r+lfvQ3ERcqXzCcY1/E6Fe7ZSMtOhmkmADqTarBOU4uJiU5o71S+YqKgohmalAoaLskuXLoDhipEFNdRp2ONSdrPCaaj9hPHU8N1331Hw+P3oz81GLy83Db+j2M+QIUOQUpKUlORRXDAvL4/ExEQOHTrEmjVrav4OqtBgI//BBx9w0003WWaLmzdvZty4cQgh6NWrF4WFhRbdlPogpaS4uJjCwkKKiopa7b/CwkKKi4vrpUcjgp0JEyLcSKQQI84/o++pLsiUZOeMI8NwOWiznzffTwtwX1zasWMHBfuNUM9+UUY6d3WLRGVlZdWqX9aZjp3hwB7kfz4wMoN9/My3HBIK+pw/1ynUtKKigpSUlDolerlR6ZKR1VTy0p/+4xmvmSiakHwXQ3zeaLTXPkN7+B/g40v+1b+3JDYFBwcjpWT3bmd4bkxMDP169jD/jjueTMVDv0V/+kH0V//u8ZSyrAz9tSqTsXM6A+Bfblxvhw4dYrevcb2n7HZKdDsyYzt3NtovX76cTZusT+/Z2dm8//77bNhg5NVkZGTU6zprkJHfvHkzHTp0oGvXrpbtWVlZlpl9eHj4GWuklJSUYLfbCQgIwN/fv9X+CwgIwG631ykU0UL/8wAQN880/u7eGzH1Rqfx7dTljL63qsi8HPS/P4B+79XIo4eQG1cbb0R05De/+Q0A33cd5Lbf2rVrWXMqF4Dzp13D8OHDKSwspKJK6GR5eTlvvvkm8+fPb5Dwmhh/qfP18HHWxKkOzt+UXPJV5efKRt/0k8dj/frrryxatMgME5VSov9nIfJEKvJEGvp7/0Kedoq0SSmN9yoqrCJrwvNlor/1Qv0/oKJpcYlU0277I8LXH9G7P7bXv+BErNXf7chQdcXf35+gCOf2iJ+XO38LyfvQ1y1D5udad0o0iuaIYWOd537sFfCy4/vrL+Y23wrD4H+3crXbeR3CggAnT560vFe12lR5eTnZ2dmkpqZa5BOqo1Zn01NPPeWxpNX06dNZtGgRjz76qNt7ni5yT35hgGXLlrFs2TIA5syZY7k5gPGBHckFrR0vLy9TO6auyP97Hj0/F1ukc5C51aiBmnv+pZSsWoL3v98j6K6HGxQfXpafjeM2qz/l9C1HdI9nXOcurFu3ztwWXVrARVdN45NvF1PqZUdH4I0hzOSYcdjtdouGhyOjtqysjJSUFFOwqTq8vLw8fk8VI8aQ8d7LAAR274V/lTb6B9+T/fgDiNRDhIWHkzP/OU5vXkfooGF4RVlviI508p9++okJEyYgsk6RseRLtF1bsHeNp2TDCoKGjsbvgskAFHz+LoWfvUvIg0/iehn7XXgFFaeOc3rbL/iMOh8QlG5YiV3qdFAFyWukunGuD7Kk2JCyrgNFFWXkAxHzv8J2jjOb9eDBgyxbtozAwEBGjhzJsmXLmDx5MgUFBQQHB7Nw4UKysrKIjIwkYtQIePY5APzLrUqt8v1XkUDkJz+i+Rm6TXn7dlLi50/kn56m4JO3sCf0xzc6muwB5xG0eyf0Mj5/cWQU/w2OpEII+iUkEBoebl53sbGx5jm8vb3N76y8vNxUtATjGjx58iQHDhzgl1+MG8jjj1cfFQd1MPJ/+9vfPG4/evQo6enp/OlPhoZJZmYmf/nLX3j22WcJDw8nI8Ppv8zMzKw2znTSpElMmjTJ/Nt1P4DS0tIm8wE3BaWlpW6foVaEF3jYR8e4MRYv/ZrSAUNN7ZczQR7xsPjdpZvpj7z88svRMtPp9Naz2K+6GS0+gWn6x2zNLiMprDM+3nYyMjLMjL+1a9cyevRo81Cus48VK1YQExNT7Y0dDH0Pj9+TZkdMvwP52dsURnejyNP3ck4UcuMa0h+dCZW+8aytv6CNsPpb09KcJRZ3795NVKmxmFuRl0vFXmN2n79zKwV9BiM3rkF+9i4AuSuXWI5TEhSCuOY2tLwcyvwDEXY7HNhDuX9Q/cf6LKPaca6ClBKkRGiaoSHz47eIsRfC6VL0P92GuPEutAmX1XocPeUwaBpZ2BAu5/3ggw8A6NmzJ3369DG9D4GBgei6TkBAAFlZWZSWlpJV6HRH2qVnt0jmxvXQIwHh60fFlg3QZyCZublw2fWUAgUZGciR5xO+7WfGpe1lTXQCG71DoTKSuU9IAFFDhtC5c2f8/PzIyMggMDCQgoICiouLze/s1VdftZw3ICCAbt26mQYe4LPPPjPzXTxxxlPD2NhY3nnnHebOncvcuXMJDw/nueeeIzQ0lKFDh7JmzRqklOzbtw9/f/8WVWFrs3R1lseTKckNOpTMdBdJ0u5zauV069aNuKEj8H5pIeJiQ4ogYuoNjE/by4CMFC641JjthocbiSObN282HxUd0Tddu3Zl4sSJ5OXlNUiUSUy4DO2NrxDRsZ4b+Fcme+3e7oynz7c+bZ4+fZr8/HwGDRqEEIL9+11kj3OzzKQquep7w4VVqYQJwM7NFjeZ6J5gLPyGhBkGHsDXT/nkGxH57afod12JLC+H7RuRXy5Afv0xVNZClos+qv0Y+bnI/y0CXa/2qTc2NhYhhJs8gUPiw+GG9JRX4or+r8fR77/eWOPKOoXo0s290bnDARiQlYqfn/NJ5OZ9G+h0PBkhBFFRUaaY2c0330xYWBinTp2isLDQY61mX19fhg2z6kMlJ9dsG5okTn7w4MFs3bqVWbNm4e3tzb333tsUp2lWlixZwowZM1i9ejXx8c1Tm1T7zSTkgPPQ/3avM6yyCjJ5P/oX7yJiuiGm3+Hxxy113YgS6RiNdtefkeuXI0ZPNBd7XRGBLjHBQcHYpc6440nY4uKM911m56mpqZw+fZpvv/0WgP79+5u+xeTkZI8+z7ogNM3UE/H4/sDhyFXfWzdWSThxrAF17tyZooIC9u7dy+j4ztZZzYChhkGvSnk5RJyD6NHbWHjtkeDextcPSlqfdnhbRJaXIb/7zPgj5RAyo/IGnJoMXSvDGuvgqpQbVnreXuk+DgkJsbhFXBk/fjx2u524yt/57373O0oP7kW7cooRAJCZjv7cXyC2uyE94uB4ZQ2EDu4uKeHlhfj9HxEdOyNWGOtG/fv3JyT/iEW3yoG9tJhRI0fy/ZIlvPvuu5b37rnnHnbv3k1CQgLe3t71vYI9AAAgAElEQVSMHj2a+Ph4kpOT+eknz2tSDhot43Xu3Llm0oAQghkzZvDaa6/x4osv0qNHj1r2bv18/fXXDB8+nG++aVjx7foigsMgOg65YxP6J/OpuPNKI+2/Ev3VJ+DAbsOIZ1fzWJx+DNKOICZdgYjphnb9DESMh5lHVQI9J4FceqmxOPrzzz+bBh4gMjISf39/OnXqxKZNm5pEs2PHjh18tC0R+YcnjQ39BoPNBsWFlnYOI9/hxBHiflpMaWkpOSnOoiQlNjs7B44FFxeAmOSUSRYhYYjf3o/2+hdGolZVfP2VkW8EZMZJi767PHIAciufyvbvhrTDxuvCfPN3L3XdWByveqwNKwAQMx6ybE9NNUIiBw8eXK0LMSgoiIsvvtiMiffz8yO0/2BDeiMsHBHfB+2VT9AeedF6zl2Vi65hntcdtFETEN17m9fCgAEDELE94Oghy9qlPHkM/eHf0e27jxgwYIDlGFf26YHdbmfgwIH4+PgghGDo0KGEhoa6FTDx2IdaWygoLCxk8+bNvPDCC81u5AFEz35GtaWVi0HqyI/no6/+Af37fzvjyQG54jv0je4xtA4pANG1nk8glW4RMe13ls09e/b01NrUzOncuTO6rvP555/XSd2yPqxevZrs7GyyI6MRU65Hu/UBCA5DJm5DHnXGrmdmZmKz2Qg+mUpYgWE0snduA7s39Ehgw4iLWbNjJ2ljXKJ5rnTJkgwONRLWvDxn9wpfP1DumgYhdR39Y2tVJvn9l8h9zhBDuX6F8/Wa/wGgv/Q39CdnWfcrL4MTqYiLr0IbMd65XUp27dqFpmn06dOnQf0V/oFGzsblN5gzd7N/nTxrzDs47zwjii4iIsJoW1xovXa3/2wU49m9jU5VFqo7fzEfedy4UckqoZMO92lNtClZA/2ztxvsm66KiOmGNv2OGtv88MMPnH/++fTo0YPQ0FB27tzpdrdtSkRcD1zjleSayqpLEcZdXJv5CPrcfyCXfm2832cQIsiYhcu9vyLfrgz1i4qhPghNw/b2tx7fi4yM5NSpU5x33nkkJCRQVlZmzpIcs6H8/HzefPNNLr74Ynr27InWQPVIVz//wUOHiJx6k/GHfwCkHUF/6o9mf7OysggLC0PLOkbIacMYZ/v4o/3x/xBdulHxv/9BUhJZWVk4Lk/h44O46W4oL0OMnFBzZwKDTUlaxZkhf/wGKmfCAMT3hQO7nU+kPn7W79jhJkmqDInNyzFzTeSmtVBebkyIXNiyZQv79+/Hx8fHIq3dELQrbkBOuR79gRvgZOXifjUzeQejR49m1KhRxjUS0dG4njNOguM63bnFbBsdbEyWBnWKYOSyzxGA/ti9iAmXITevRXvuPXNtqC6fS83k68DXX3/N1KmGdO7UqVP5+uuvm7cD5w5HTLzcfXvGScTk6xCDRiLueNi5Pce5YCP37DBfC5/GkyO4+uqrmTFjBr/5zW8IDw+3xPmee641Cuh///ufofbXQA4eNGbqgYGB1sUmb/cQ26KiIgIDApCZ6XhLSeDpEnI6dzMXyBzJJNnZ2WizHjcf8bXzJ6NNmmpdm/BESBgUFVr07xV1R2aeQn65wLmhRwKa628YwCHLMXwcdOtl5DC4Fp9PdylWf3i/cVM411iULC8vZ968eaxfv75J+i80DVGZ40L/ITVGkoHhwjYnOZWTM+mSdU7qYQg1ZuWBxw4za9YsfnM0EZurS2flYiM7/lCS5diuqrOeaFMz+dpm3E1BVlYW69evJykpCSEEFRUVCCF49NFHax3YxkJ4eRlhhRMuQ//nX61lAytjgbXh45AhHdBfeARysqDS5y4rJQBcKzA1Bt7e3tVGIPj7+3P//ffz2mtOcbVTp07RvXv3Bp3z0KFD2O12evfuzbZt2ygrKzNmMR5846UlxYTt+xVS98KQ0XQo0snwMxQzKyoqTD2l7OxsxIQJ1HskQyqjxXKzzYvWFanrkLgN+g0+q/XvpZRuNRNkUSH6bEPsTYy7BHHTXSA043rqPQCSdhoRXrk5yJ9XIq6/nUP//hjvnZuIfvRu8zj6F+/CyTS0v76APJ4CnaLNazI/P99S9MOxjtSYiEuuNmbW1/6+fjs6fi+VRl7fuMaIEhs4HHIyke+9jAwLt0iPuKK/8AjaA08g+g9BHtxLQEmhx3YOzt5fXx1ZvHgxV199NRs3buSXX35h8+bNxMbGmvVSmxPRsTPas2+jPfUm2j2zETfehXBVZIysnCH8utGQxi3IM7TYe/VHu6x60aYm6asQXH311eYM/0wznh0cO3aMjIwMysrKiI2NRdd18+lAu9mI3tIRrFy+nMzMTEqLS/Cp1BAR0bF0HnsBmYVFlJaWsmXLFjNU7kzlNoSrkfeA3LAC/dUnzcXAs5Xsx+5Hf3ymZaFUf+AG87W46W6EZjONs+3hZ7C9/S3aNbchbr4X7cnXISiU7wt1vu5+nuUpleR96EVF6H+7B46nIqJikFKydu1aS8TJkCFDqo2qaQgirge2t79FdK7fsYWfv6G4WmnEHfpI2tiLzDb6i49CZjpi0hVG9mwV5GFDllif82cmb/qhxvMpI18L33zzjdssYPLkySxatKhF+iPs3ohO0Ygho9EmXIZwdVU4NNlXLUEu/9Z8nBUuP57mJDo6muuuu46uXbuesTF18OWXX1qO6+fnx6ZNm5BSInr1Q/zufk76B7MzMZGPP/6Y0vJyfHRj0VcMGGrGIhcUFFj6UlhYaNEzqTO1GHlSjwBGhqQD/ZuP0T9/F3nsKPov7qnt7Q19/XLKdm2F9OPod1+FvnQR+uIvLG1qesoRPj6IzrHk5laREah0a+wP6cibAyaS4+1vGP+oLhQUFLB161aLe7BVRvdFxyFTKiNsTp1EDBuLGDgc7ZEqUhnFhZ4XdbMykFsNLZvqErYctCl3TUvgalwc3H777S3Qk9oRQiAuvdrQdTl1AllZPLtO4ZJNSGhoKKmpqYZBPgMXV1WZDEekxNatWykqKiIgIAARFcN/eliTRMr8AtHe+sYow5ZiVJr68ccfSU83xMcuvfRSlixZQlJSUq0yDG4EG0Ze5ma7uXr0X1Zb4vj1T+YjBo9Efve5sc8yI0JLnvcba+nHdoZcYJ2BylVLnJW9unR198FXoaKigg0bNrjLqvj5Uz5iPBsPGzPhQ8GRDMk4QnlYBAsWLLA0jYyMJDIyktaG6JGAXPIl+p2VZTJ79Te2d+uFGH8JcrUjuKITwu6N9uhLyI1rEGMvRv/nX5FZp5BvPguA9vAzNZ5LzeTbGVpluKNc/YNxUWmaR59xcxIaGkp5efkZL766ql727t0bcAo6mbH4Xbq67dczsoN5U3FkHDoMPBihoF5eXmcWzx9sVAuSn8wzhM7KTiOLCqh4fjbynReN0o6VyJWL0V/yIA+SuM26kNjeqJps51K6UYw8v1Y3xy+//MLWrVst9SjKhYbo0pU1IdHkeBtjmuPjT6GXN0sPWxMGY2JiuOGGG+qkB9/ciB7WcE5H+UswvhsAunQ15bVFXDzatb9HdIqG+D7gmkzVteZCI8rIt0ccF9e+XRAX36hRNWeCQ9Liv//9b70VKtPT01myxNCSmTp1KhdfbOjtBwQY4lAOV4vuZUcAsfnOhLCoi53JTa5p5T4+PgwaNMh8XW/lUEBozgQpuWEFctvP6A/caCTwAHh5IW6d5b7flOtNyQT99afQayi52OYpLcavUiLDFTFivFkwpyYcWuuuFN/xJ8TvZlnUF3N8AviyxzAOnXL66+Pi4hg7dqzb/q2GHr2dr2O6IUI7uLzXBzHjIbTZ//T4pCc6RBqa+TYvtCdeQ9Qi4KiMfDtEe+xfTgnjFp7Fg1MrG2DBggX10nf//PPPTaExh18dnGFj27ZtY9OmTRQWFiKBqELj0b5nzgkzwgisRn7atGlmUXNfX98zLqIsXAWztjsFo8Tka7G9+R+030xCTL3R2Ojw4Yefg/bXfzr3O+DUMm9P6Atfh4J8bB2j0J583VK3QNxwp1HysgaklBY5a8fNvbhLd7YlJlr89Cf8QyjwtqpUXnHFFQ1Wv2xKXEN0Rax1zUAIgTZifPXG2zGJ6xqPiI6r9VzKyLdDhH+gc/CD6laEuCmx2WxccsklgLHwmZiYWOd9XWf+QUHOouEOI5+SksKGDRs4ftxYZO5YnMf1+39mUkqiZbbtmojlWpg5MzOT5ORk98W9OqDdeBfaW99AjwTkLmcyCx2cPmBtynRDZ7xygVb4ByL8A2DQSCOJC0NKtz0h044gf1oKVAYKdI5F9EhA/P6PMHhknYq/O8YzIiKCSy65xJS1/ve//83atWsBuOyyyxg3bhyyyjqPmXTUytFe/Qwx9iLEVZ7r0VaHiKvMXHed/dd0nvp2TNFGcNzt61BBqTno3r07I0aMwG6316vmr+NivfXWWy2GWghhuZD/9z8j5T34pruICAvDa+YjbsdyuHhc4/sTEgzxse3bt7u1r2v/RMdoKHb69V0rfgFWDaDKrGPbzEfQfne/sS21cbO4mxNZWoLMsYbHyhWVJRN79cN3wmRzuzZqArZ73cfFE/v37wfgggsuoFevXpanOAdBQUH079+f6Ghn9ElYWJibSmNrRfj5o/32Pmc4bl3pkYC47na0G++qvS3KyLdbxLAxcE5nhMtF1pJ4eXkxYsQIEhISOHnyZJ3Kl50+fRopJaNHjzbF71y55ppr3LYFDxqG7e9zLQtZDm6++Wbuust6YVx00UXExcVZtOfrTcdKd1RcPNqf/gFVzi3OHep87VrYpNLg68/NRl/+3ZmfH0OxUV/4uptwl9Qr0D+eZybFedx33y5DO6U+53NU0Vr4OvqfbkUWOnVYKMyHTl2w/elZtICaszGrIysri44dO5oL7Ha7nZgYqyyHv78/Xl5eFvdba1xkbWyEpqFdONUQL6wD7f8baQRiYmJISEhASonNZuPpp59u9bMFERiM7Zl5Ld0NNzp27MjOnTv5/vvviYuLIyoqymM7XddZudKQjq2q/e0gKiqKG264gXXr1nH0qKEwWdNFXl2FMV9fX0uY3rZt24iNjbWIP+m6TlpaGl26dHF3BVTmJ4gR4xGVoXAWYqrJ9I10fna59keYWPtiJFRm0xbkGZnNdjsiKgZ94VxI3ocYezEVP3yFCAxCu8UoqiJXfY88cgBb1Rhsx2f7pzG7rk6nyHLulGTIPIksK0O+5bq2sBcGGteELCqAMzTuDnJzc91+G1OmTDGLayQnJ5suOyEEAwcOJC8vz01SQ6GMfJ3w9fXlxx9/BGDVqlXMmTOHr776qoV71TZxzMw2btxIamqqx9k4GD7ZpCRDo6MmOdXIyEiuvPJKkpKSzngW5+XlZS4Gl5WVmdmS9913n3lj37ZtG+vWreOKK65wq2ksRoxjdepJYrr2xevwYeLi4qw3gqruG8d+Xl6GVHLitmrFzmR5OeTnIsKcNxz59gvIzWvNv7U3/2O65eS29bB1vSGAdctM9MpSinXSYy8sQFRjnGVWBvKLd5FbjHJ1VQXc9G8+Qhw9iIjvA4UFzoXmM0BKSUFBgZsmi91uNw1/VWMuhDBn8worysjXk/z8fMvCnaJ+uFYIy8rKIi8vz6MrxlH+bPDgwXWSU3XEz58JdrvdlER2Dad8/fXXsdvt3HPPPaYgWnp6upuRR2jsPJ7OzuNGqOeFF15okbUVQiCm/RbhYUZv+8OT6Eu+RP5nIbKoEPz8LTcI+elbyDU/oP15DqJnX2Obi4EHDD2jTCP+31HgHEDmZJqVlagmoslV1VX/w40QFoHt+ffc2/280jTwUKn77kpKMjIl2bi5BARZ3VL1ZO/evei6Xu0TnKJ+tCkj/87mkyRn1z+muSa6hfkyY2jNYYYlJSVceOGFlJaWkp6ezhdffFFje0X1CCG46aabWLduHYcPH+b999/n3nvvpaKiwnSnlJaWsnq1kfY/ZsyYmg7XKDhm8iUlJW7hlGVlZZY6m55i6l2FsMCzTo92qecnFsDQXKFS06XfYGyVBVFkUaEpK60/Pxvt1c/AUwp7FVVCB65a7KQf85hxrP/9AetO2RmWdlJK5KKFyCMHre2OGxnEePtARQVUuNxECvMt4av1xRFZU50rT1E/2pSRbylc3TWbN2/mgQceYMWKFW0iTKs1Eh4eTseOHc0M2DfeeAOA+++/HyGERUqiOb5ju92Oruu89dZbtT41eCqCUtXwb9myhT59+phhf7US3we8vIzZduI25PFU5N4diOiulmb6rOl1O16lC0gu+hAAMXw8cuNqwyXkElJrqVEbFGLI2IK13f7dlqcDV7S7/gyDR4HU0Z//KyQbollEdkJcOLVuffWAEAI/Pz+LfLXizGlTRr62GXdzMHToULKyssjMzGzVyRatHU8umoKCAnbv3m0WMHYkwDQ1rr58T8WTwXii2LVrF2VlZaxevZqAgACGDjWiZjzN7j/66CNmzXLPePWECAxGDBmNrKzqpT9WWRO5UsJWe/Apz7IIPr4Q0sEo7xjbAxHfB7niO6MGbqJLtmjCANi4Gk4es+ZNJG43j0/Pvs4yfFmn0P+9ADFqAvKES9SRfwDi0muM45SWwOBRlaURbWgPP4P+j4eNMpN9BlpyFOpDbm4uBw4cqLWQtqLutCkj3xo4cOAAFRUVFt+yov4MHz6cEydOsHPnTnNbYmKiRcK5ujKDjY2nyjrDhw+nqKgIHx8fcnJyGDJkCElJSZw4cYK8PGOR1GHkq8uYLSoqqtGv7Ej0clQLcnv/3+8Z5Qrj+yDGXmQmGAFof38DQkIhIx39qT9Ah0jENbchxlwIFeVmJTHtoachNNxwBy14Be0PTyB/WYW4eBr6J/OMegTxfRFedrS/PIf+3F+Qx1IMqYYqMsli4Ai0S67GE8LbB+2BJ9DfeRHRAFnrjz76iIqKikar4qRQRr5OOHzyYFyY//rXv7B5Ku6sqDM+Pj5MmDCBmJgY1qxZQ0FBgcXAX3XVVQ0uF1hXHElSDux2OyNHjnRr51p+EDB91/n5Rox4jx49OH36NEOGDOGbb77hnXfeYfr06ZxzzjluxwKjXu2+ffu44447EHHxeFL10Wb+nyEBcNl1UFqCGHUBsjDfXNiUMQGGJvvQMUZJuJhuyKxK/Z6BwxEJ5xr1TwHSj6E/cqex345NkJeDuPY2s5ScIwpIOiJyXPHxMwp61IAIC8f2p3/U2KYmXKUMHDdSRcNRRr4OpFTK1Coan/j4eOLj4/nkk0/MiBqw6t00NbGxsfTq1YusrCwyMjLqXGCirKwMb29v8vLy0DSNyZMnI4RA13Xi4uI4cuQI+/fv92jkT58+za+//goYC80+g0ei3fc35C+rkJt+Av9AxBU3IPoNBkCEn2OWeHRdpRBCIM63JryJDhFosx6Dymgcj8XIDxsZpaJ7gnNbsOeoMTFlOppDg6cJcX0iqilsVlE/lJFXtAoCAwPJyMggICCAa6+9tlmflBzaOrquc+LEiTpHdZSUlLBmzRqSkpIIDg42F4k1TWPq1Km8//77FBQUWPYpLS3Fy8uL1NRUc1t+fj6+vr5GMlF8AsR2R5x/KcL3zEMIxYCh1g0RHd3KyYmpNyHOcfmsPk6RL+2ZeYAwJBn8mieU0aEfNHHiROLj45vlnGcDysgrWgWOxJfAwECPi7LNgaZpNT5BTJ8+ncLCQsrLy1myZAn5+fns3m2oSHrqs6+vL6UuevFSSubPn2+JywcjJ8BR2EIEBJka4o2J9ve5ICVyx0aEr59R7GT0REsbIQTa0/OgpAhxzpk9SaWkpHDy5ElzvaI+OLKOO3fuXG12sqL+KCOvaBU4BKjqomnTUjjcLo7CI66a5p4S5Kpq1TvaOwx8dHQ0OTk5HD161JI81RQ4pH3FMENjvbrAVNGxYW4yR1nMsLCwasvu5efnk5+f73ZDzcnJQQjRYjf59ooSKFO0CuLiDGnktpAA43jq+OUXp4Z8dTN5VyPvKH7i4OqrryYwMPCM9exbgpSUFFMhsiquSWCrVq3i4MGDvPrqq6aukIMFCxbw5Zdfut3Qc3JyCAoKUkENjYyayStaBeHh4cyYMcNS3KO14ufn5+Zy8eRe8PPzIycnh/T0dMLDwykqKsJms1mKYTSkaElzc/DgQRYvNmSE4+PjzTUIXdc5cOCAaZwHDx7Mtm3bzLaJiYnmYvabb75pHq+goMByc8zJyfEoKaxoGMrIK1oNbUWrRAjBjTfeyPr165FScuDAAY++/MGDB7Nnzx42btxohl+OHz+egIAA07j5+fmRnZ3drP0/UxxGG4xZe2hoKDabjc2bN/Pzzz+bT2P9+/fn2LFjnDxpLPQ6Fp8/+ugjy43RVbdISklOTk6beJJraygjX0fS09N5/PHH2bFjB97e3sTExPDEE09U63dUtG9CQkK49NJLa23Tt29ffv31VzPxKSoqyiKd4JjJe9KVac18/PHHxMfHc9FFF5la/A53TUBAANdffz2vvfYaUkry8/PJzc110/TJz8+noqKC0tJS9u3bR1lZmZrJNwHKyNcBKSW333471157rfm4uWvXLjIyMpSRV9RISEiIaeDPP/98N22csLAwysrKyMvLa9Xqpp4KsB84cICSkhJz3SE/Px9N08xs1fvuu489e/awbNkytm7dau43btw41qxZw48//sj+/ftNDSPArTCIouE02MgvWbKEH374AZvNxpAhQ7j55psBY5V9xYoVaJrGbbfdxqBBgxrc2ZZi3bp12O12fvvb35rb+vf3UBxCoaiCq6/e0yzVEbGTkZHRqo28Y91g/PjxpkIoYIn3B+MzOp5IhBCmLLOrfEXv3r1Zs8bQ6XE18GPGjKmTrLSifjTIyO/atYvNmzfzwgsvYLfbzWSG1NRU1q9fz0svvUR2djZPPfUUr7zySoPT1HdtLSIvp6L2hvUgONRG/yE1+4KTkpIYMKDmlG6FwhOxsbFERUUxfPhwj5m0jkidxYsXc+mll9aq1yOlZPfu3cTHxzdrLLnj2g4ODkbTNLfImODgYPLy8ujXr59lu6vG07nnnoumadUurisD3zQ0yOouXbqUqVOnmo9njpnIpk2bGD16NHa7nXPOOYdOnTpx4MCBmg6lULRLHBm8jkXJqrgavCVLltSaJ3Dq1CmWL1/OBx980Kj9rA2HlkxwcDC/+93vGDRokOmqDA4ONp9sq8oDu+oCnXfeeWb1pquvdk/4UqquTUODZvLHjx9n7969fPbZZ9jtdm655Rbi4+PJysqyzEg6dOjgsZACwLJly1i2bBkAc+bMcRvokydPmlKwg4a3TJJEnz59+P777+tUXs7Hx0f9WOuAl5eX+p48EBAQ4CaY5kphYSFgSCoEBQU122z+ww8Nbfpu3brh7e1Nt25GUZAjR47QoUMHAgMDGTp0qNuYenl50blzZ4qKiujatavpyomIiDBLaN5yyy3s2bOH2NjYNrX43Fao1Wo99dRTliLHDqZPn46u6xQUFPDMM89w8OBBXn75ZV5//XWPizTVMWnSJCZNmmT+7SpSBYbWR0snR4waNYrS0lI++OADbrrpJgC2b99OcXExo0aNsrQtLS11+wwKdyIiItT3VMnEiRNJS0tj7969pKWl1VhsxJFtC5CWltYs2aEVFRVmmGdVdciAgABKS0tN+YaqYxoREcG0adOQUrpp9d9yyy2cOHGCsLAwRo8eXa2Wv6J2apLjqNXI/+1vHooVVLJ06VJGjBiBEIL4+Hg0TSM/P5/w8HDLgGVlZdW9Sk4rRAjBO++8w+OPP87cuXPx8fGhS5cuPPnkky3dNUU7oF+/fgQFBbF3717y8/NrvFZcM2hXr17NZZdd1uSSzI6nh+pcTrVRXf/CwsJUXYZmoEG/jmHDhrFr1y7A0OUoLy8nKCiIoUOHsn79esrKykhPT+f48eNtXlWuU6dOzJ8/n/Xr17Ny5Uo+/PBDund3L8ysUJwJDt/8N998U6Nf3jU7Njk5uVqJgcbEkczUliPkzmYa5JO/4IILeOONN3jooYfw8vJi5syZCCGIiYlh1KhRPPjgg2iaxu23395sBSAUiraIa/jk4sWLufzyyz22cxQocZCRkUHv3r2btG+OzFU1626bNMjIe3l5VVvHctq0aUybNq0hh1cozhpca5omJydX2y4nJ8cMVwRMX7mjqlJdggPqw8GDB/npp58ICwtT6pBtFDW9VihaCVdddRVBQUEIIaoNXsjOzqZTp05cccUV+Pv7k52dTU5ODvPmzeONN96w6Nc3lOLiYlOvRhXWbrsoI69QtBJiYmIYOHAgUkoKCgosNWWllOzcuZO8vDxCQ0Pp2rUrffv2JScnh1WrVpnCX64a9w5Onz7NihUr2Lx5c736c+TIEcBYcHXEtyvaHsrIKxStCEfc+4IFC/j0009N433y5ElWrlwJOOURYmJikFJa9Nq3bNnidsw9e/awa9cu1q9f7+bTr4lTp05hs9m4/PLLlTpkG0YZeYWiFVE1uWnPnj1s2bLFEkXjMPKusdFjxowhMDCQY8eOUVRUZG4vLy+3aM38/PPPdc5jSU9PJyIiQgVNtHHU6NWBmJgYLrzwQiZMmMCkSZOYP39+qy5Tp2i7VDXyq1atYt26dWzbts3c5jDyrkmCHTp0YMyYMQCW5EWHy8dRQ3bPnj2mNPDJkyc5ffq0x34sW7aMtLQ0Onbs2NCPpGhhlJGvA76+vvz444+sXLmSzz77jBUrVvDSSy+1dLcU7ZDaomOmTJmCr6+v2/agoCDTkH/55ZdkZmai67pp5KdMmcLEiUbh7pSUFAoLC/n8889ZtWqV27EcImigRMPaA8rI15OIiAief/55FixYUC/5BoWiLnTq1Inx48dz9913c+6555rbL7vsMu6//363BLyRI0cChkhYaGioKRb48ccfs3DhQgoKChBCEBAQQL9+/QgLC2PPnj3mourRo0dZvny5RS7B9akhOjq6yT6ronloU3emwcYAAAhzSURBVEVD1qxZY4k4aAwiIyPrHTkQFxeHlJKMjAxz9qRQNAZCCAYOHAgYRUYOHTpEQUEBMTExHsW7hg0bxpAhQ8wngBkzZpiFbfLy8ti8eTM2m830q4eGhpKcnGyKAhYVFZGYmEhJSQnjx4+nvLyc48ePm8dvy3IkCoM2ZeRbE2oWr2gOrrnmGlJTU6uNUxdCWFw8drvdTTvKNZt2zJgxHpOtDh48yMGDBwHn7P2CCy5olM+gaFnalJFvLbG6R44cQdM0JZWraHKCg4Pp27dvvfaZMmUK27dvZ/jw4Zw6dcqiWR8WFsbgwYMtLpmqUuBpaWkMHjxYVT9rJ7QpI98ayMzMZPbs2dx2221K+1rRKgkJCWH8+PEAHqtRDR06lKCgILp06cL69eu54IILeO+99yxtVK3V9oMy8nWgpKSECy+8kPLycmw2G9dccw133nlnS3dLoTgj/Pz8TEXJK664wvJet27d8PLyUka+HaGMfB1ISUlp6S4oFE1KfHw8J06cqFb9UtF2UUZeoVAwefJkFUzQTlFx8gqFAkCtMbVTWr2Rb2uzi7bWX4VC0b5p9UZe0zTKy8tbuht1ory8XIk5KRSKVkWr98n7+vpSUlJCaWlpq36clFKiaZpHXRGFQqFoKVq9kRdCWJI5FAqFQlF3lG9BoVAo2jHKyCsUCkU7Rhl5hUKhaMcIqWL+FAqFot3Sqmbys2fPrnPb+fPnN0qb+rZtqXYtee6m+Cx1HevW/lna0/g1xTFb6ppuC99NY567pu/Z9sQTTzxR5zM1McuWLWPSpEl1bu9ayLghberbtqXateS5G7tdfca6tX+W9jR+jX3MlrymW/t305jnrul7blXumtmzZzNnzpyW7oaiGVBjfXagxrl5qOl7blXumvrc8RVtGzXWZwdqnJuHmr7nVjWTVygUCkXj0qpm8mcDt9xyS43vP/HEE2atTUXbRY3z2UFbGGdl5BUKhaId0yJGvra7X3snMTHRskjy7rvvsmrVqpbrUBNyNo+1Guezg9Y+zmomr1AoFO2YFlOhLCkp4fnnn6ewsJDy8nKmT5/OsGHDSE9P59lnn6V3797s27ePDh068Oc//xlvb++W6qqigaixPjtQ49w6abGZvN1u5+GHH+a5557j8ccfZ+HChWZVpePHj3PJJZfw0ksv4e/vz88//9xS3WwSbDabpYJUWVlZC/am6Tlbx1qNsxrn1kCLzeSllHz66afs2bMHIQRZWVnk5uYCcM4559C1a1cAunfvzqlTp1qqm01CREQEqamplJWVUVZWxs6dO0lISGjpbjUZZ+tYq3FW49waaDEjv3btWvLy8pgzZw5eXl7MnDmT06dPA8aMwIGmaeb2tk5FRQV2u52IiAhGjRrFww8/TFRUFN26dWvprjUpZ9tYq3FW49yaaDEjX1RUREhICF5eXuzatatd3dmrIyUlhY4dOwJw8803c/PNN7u1aUVSQo3G2TbWapzVODtoDePc7D55x91vzJgxHDx4kNmzZ7N27Vqio6ObuyvNytKlS3nllVeYPn16S3el2Tgbx1qNsxrn1kazyxocPnyY+fPn8+yzzzbnaRUtgBrrswM1zq2bZnXXLF26lCVLlnDrrbc252kVLYAa67MDNc6tHyVQplAoFO2YJp3JZ2RkMHfuXHJychBCMGnSJCZPnkxBQQEvv/wyp06dIjIykj/+8Y8EBgYipWTBggVs27YNHx8f7r33Xrp37w7AqlWr+M9//gPAtGnTOP/885uy64p60phj/cwzz7B//34SEhLqVVlI0fQ01jgfPnyYt99+m+LiYjRNY9q0aYwePbqlP177RDYhWVlZ8uDBg1JKKYuKiuSsWbNkSkqK/PDDD+WiRYuklFIuWrRIfvjhh1JKKbds2SKfeeYZqeu6TEpKkn/961+llFLm5+fLmTNnyvz8fMtrReuhscZaSil//fVXuWnTJvnss882/wdR1EhjjXNaWpo8duyYlFLKzMxMeccdd8iCgoIW+ETtnyaNrgkLCzNnZ35+fkRHR5OVlcWmTZsYP348AOPHj2fTpk0AbN68mXHjxiGEoFevXhQWFpKdnc327ds599xzCQwMJDAwkHPPPZft27c3ZdcV9aSxxhpgwIAB+Pn5tcwHUdRIY41z586diYqKAqBDhw6EhISQl5fXMh+qndNsIZTp6ekkJycTHx9Pbm4uYWFhgPGjcQxuVlYWERER5j7h4eFkZWWRlZVFeHi4ub1Dhw5kZWU1V9cV9aQhY61oOzTWOB84cIDy8nIz5lzRuDSLkS8pKeHFF1/k1ltvxd/fv9p20sMasBDCY9vqtitalqYYa0Xro7HGOTs7m9dee4177rkHTVOiuE1Bk3+r5eXlvPjii4wdO5YRI0YAEBISYj6aZ2dnExwcDBh3+YyMDHPfzMxMwsLC6NChA5mZmeb2rKwsc9agaD00xlgrWj+NNc5FRUXMmTOH6dOn06tXr2b+FGcPTWrkpZTMmzeP6OhopkyZYm4fOnQoq1evBmD16tUMGzbM3L5mzRqklOzbtw9/f3/CwsIYNGgQO3bsoKCggIKCAnbs2MGgQYOasuuKetJYY61o3TTWOJeXl/PCCy8wbtw4Ro0a1SKf5WyhSePk9+7dy2OPPUZsbKz5iHbDDTfQs2dPXn75ZTIyMoiIiODBBx80w63effddduzYgbe3N/feey89evQAYMWKFSxatAgwQignTJjQVN1WnAGNOdaPPfYYaWlplJSUEBQUxN13361u6q2ExhrnNWvW8Oabb9KlSxfz2DNnzjSVKhWNh0qGUigUinaMWulQKBSKdowy8gqFQtGOUUZeoVAo2jHKyCsUCkU7Rhl5hUKhaMcoI69QKBTtGGXkFQqFoh2jjLxCoVC0Y/4f5fBMdkrc/e8AAAAASUVORK5CYII=\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df = pd.DataFrame(np.random.randn(1000, 4), index=ts.index,\n",
    "                  columns=['A', 'B', 'C', 'D'])\n",
    "\n",
    "df.cumsum().plot()\n",
    "p = plt.legend(loc=\"best\")"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "## 文件读写"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### csv"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "写入文件："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 146,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "df.to_csv('foo.csv')"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "从文件中读取："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 147,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>Unnamed: 0</th>\n",
       "      <th>A</th>\n",
       "      <th>B</th>\n",
       "      <th>C</th>\n",
       "      <th>D</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>0</th>\n",
       "      <td>2000-01-01</td>\n",
       "      <td>0.357664</td>\n",
       "      <td>-1.510800</td>\n",
       "      <td>-0.081209</td>\n",
       "      <td>0.985303</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>1</th>\n",
       "      <td>2000-01-02</td>\n",
       "      <td>1.186070</td>\n",
       "      <td>0.713685</td>\n",
       "      <td>0.658628</td>\n",
       "      <td>1.357909</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2</th>\n",
       "      <td>2000-01-03</td>\n",
       "      <td>-1.850055</td>\n",
       "      <td>1.149238</td>\n",
       "      <td>-0.875208</td>\n",
       "      <td>-0.920585</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>3</th>\n",
       "      <td>2000-01-04</td>\n",
       "      <td>-2.002074</td>\n",
       "      <td>1.758719</td>\n",
       "      <td>-0.836658</td>\n",
       "      <td>0.112474</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>4</th>\n",
       "      <td>2000-01-05</td>\n",
       "      <td>-1.127084</td>\n",
       "      <td>-2.111435</td>\n",
       "      <td>1.211663</td>\n",
       "      <td>-1.959795</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "</div>"
      ],
      "text/plain": [
       "   Unnamed: 0         A         B         C         D\n",
       "0  2000-01-01  0.357664 -1.510800 -0.081209  0.985303\n",
       "1  2000-01-02  1.186070  0.713685  0.658628  1.357909\n",
       "2  2000-01-03 -1.850055  1.149238 -0.875208 -0.920585\n",
       "3  2000-01-04 -2.002074  1.758719 -0.836658  0.112474\n",
       "4  2000-01-05 -1.127084 -2.111435  1.211663 -1.959795"
      ]
     },
     "execution_count": 147,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "pd.read_csv('foo.csv').head()"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "清理生成的临时文件："
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 148,
   "metadata": {
    "pycharm": {
     "name": "#%%\n"
    }
   },
   "outputs": [],
   "source": [
    "import glob\n",
    "import os\n",
    "\n",
    "for f in glob.glob(\"foo*\"):\n",
    "    os.remove(f)\n",
    "\n"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 3. TA-Lib"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 149,
   "metadata": {},
   "outputs": [],
   "source": [
    "import talib as ta\n",
    "import pandas as pd\n",
    "from jqdatasdk import *"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 151,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "auth success \n"
     ]
    }
   ],
   "source": [
    "# ID是申请时所填写的手机号；Password为聚宽官网登录密码\n",
    "auth('ID','Password') "
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 152,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>close</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-07-01</th>\n",
       "      <td>3935.8100</td>\n",
       "      <td>3899.3300</td>\n",
       "      <td>3936.6700</td>\n",
       "      <td>3886.9100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-02</th>\n",
       "      <td>3937.1700</td>\n",
       "      <td>3931.0500</td>\n",
       "      <td>3942.4300</td>\n",
       "      <td>3918.9400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-03</th>\n",
       "      <td>3893.5300</td>\n",
       "      <td>3927.4400</td>\n",
       "      <td>3927.4400</td>\n",
       "      <td>3878.8400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-04</th>\n",
       "      <td>3873.1000</td>\n",
       "      <td>3895.2000</td>\n",
       "      <td>3906.8900</td>\n",
       "      <td>3854.6900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-05</th>\n",
       "      <td>3893.2000</td>\n",
       "      <td>3875.3700</td>\n",
       "      <td>3900.3100</td>\n",
       "      <td>3857.9300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-08</th>\n",
       "      <td>3802.7900</td>\n",
       "      <td>3875.7500</td>\n",
       "      <td>3875.7500</td>\n",
       "      <td>3775.0300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-09</th>\n",
       "      <td>3793.1300</td>\n",
       "      <td>3798.1000</td>\n",
       "      <td>3811.1000</td>\n",
       "      <td>3774.7600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-10</th>\n",
       "      <td>3786.7400</td>\n",
       "      <td>3807.9500</td>\n",
       "      <td>3810.4000</td>\n",
       "      <td>3774.2300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-11</th>\n",
       "      <td>3785.2200</td>\n",
       "      <td>3806.1900</td>\n",
       "      <td>3830.7400</td>\n",
       "      <td>3774.4100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-12</th>\n",
       "      <td>3808.7300</td>\n",
       "      <td>3783.0700</td>\n",
       "      <td>3820.2400</td>\n",
       "      <td>3774.5200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-15</th>\n",
       "      <td>3824.1900</td>\n",
       "      <td>3792.6400</td>\n",
       "      <td>3844.8700</td>\n",
       "      <td>3745.8500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-16</th>\n",
       "      <td>3806.8400</td>\n",
       "      <td>3819.2500</td>\n",
       "      <td>3828.3300</td>\n",
       "      <td>3799.8700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-17</th>\n",
       "      <td>3804.6400</td>\n",
       "      <td>3800.1100</td>\n",
       "      <td>3820.2700</td>\n",
       "      <td>3787.9000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-18</th>\n",
       "      <td>3768.4000</td>\n",
       "      <td>3793.1900</td>\n",
       "      <td>3793.3900</td>\n",
       "      <td>3768.0000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-19</th>\n",
       "      <td>3807.9600</td>\n",
       "      <td>3787.5100</td>\n",
       "      <td>3828.1500</td>\n",
       "      <td>3787.5100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-22</th>\n",
       "      <td>3781.6800</td>\n",
       "      <td>3813.5000</td>\n",
       "      <td>3816.5400</td>\n",
       "      <td>3765.4400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-23</th>\n",
       "      <td>3789.9100</td>\n",
       "      <td>3783.5400</td>\n",
       "      <td>3792.9600</td>\n",
       "      <td>3768.7600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-24</th>\n",
       "      <td>3819.8300</td>\n",
       "      <td>3803.5900</td>\n",
       "      <td>3840.0600</td>\n",
       "      <td>3803.5700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-25</th>\n",
       "      <td>3851.0700</td>\n",
       "      <td>3821.3900</td>\n",
       "      <td>3851.0700</td>\n",
       "      <td>3812.9500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-26</th>\n",
       "      <td>3858.5700</td>\n",
       "      <td>3835.2300</td>\n",
       "      <td>3863.5900</td>\n",
       "      <td>3832.5200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-29</th>\n",
       "      <td>3854.2700</td>\n",
       "      <td>3857.9400</td>\n",
       "      <td>3862.7500</td>\n",
       "      <td>3842.4300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-30</th>\n",
       "      <td>3870.3200</td>\n",
       "      <td>3861.5700</td>\n",
       "      <td>3890.7300</td>\n",
       "      <td>3861.5700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-31</th>\n",
       "      <td>3835.3600</td>\n",
       "      <td>3856.7400</td>\n",
       "      <td>3856.7400</td>\n",
       "      <td>3830.0900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-01</th>\n",
       "      <td>3803.4700</td>\n",
       "      <td>3819.3200</td>\n",
       "      <td>3831.2600</td>\n",
       "      <td>3791.5500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-02</th>\n",
       "      <td>3747.4400</td>\n",
       "      <td>3729.1300</td>\n",
       "      <td>3754.5300</td>\n",
       "      <td>3720.0600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-05</th>\n",
       "      <td>3675.6900</td>\n",
       "      <td>3724.4100</td>\n",
       "      <td>3739.5000</td>\n",
       "      <td>3675.6900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-06</th>\n",
       "      <td>3636.3300</td>\n",
       "      <td>3609.1100</td>\n",
       "      <td>3649.9000</td>\n",
       "      <td>3575.8600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-07</th>\n",
       "      <td>3621.4300</td>\n",
       "      <td>3654.6300</td>\n",
       "      <td>3659.0800</td>\n",
       "      <td>3621.4300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-08</th>\n",
       "      <td>3669.2900</td>\n",
       "      <td>3651.3600</td>\n",
       "      <td>3675.4600</td>\n",
       "      <td>3646.9400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-09</th>\n",
       "      <td>3633.5300</td>\n",
       "      <td>3686.7500</td>\n",
       "      <td>3689.1800</td>\n",
       "      <td>3628.1200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-19</th>\n",
       "      <td>3791.0900</td>\n",
       "      <td>3736.0300</td>\n",
       "      <td>3791.0900</td>\n",
       "      <td>3720.6900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-20</th>\n",
       "      <td>3787.7300</td>\n",
       "      <td>3786.0300</td>\n",
       "      <td>3799.9000</td>\n",
       "      <td>3778.7300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-21</th>\n",
       "      <td>3781.7600</td>\n",
       "      <td>3778.3100</td>\n",
       "      <td>3792.6000</td>\n",
       "      <td>3775.4500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-22</th>\n",
       "      <td>3793.5100</td>\n",
       "      <td>3793.8600</td>\n",
       "      <td>3797.3300</td>\n",
       "      <td>3771.2000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-23</th>\n",
       "      <td>3820.8600</td>\n",
       "      <td>3796.8800</td>\n",
       "      <td>3829.3600</td>\n",
       "      <td>3788.0300</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-26</th>\n",
       "      <td>3765.9100</td>\n",
       "      <td>3756.3600</td>\n",
       "      <td>3778.8700</td>\n",
       "      <td>3753.1600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-27</th>\n",
       "      <td>3816.9500</td>\n",
       "      <td>3791.4600</td>\n",
       "      <td>3848.2400</td>\n",
       "      <td>3790.8700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-28</th>\n",
       "      <td>3802.5800</td>\n",
       "      <td>3818.8100</td>\n",
       "      <td>3822.5900</td>\n",
       "      <td>3790.1400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-29</th>\n",
       "      <td>3790.1900</td>\n",
       "      <td>3805.4900</td>\n",
       "      <td>3808.6000</td>\n",
       "      <td>3774.4000</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-30</th>\n",
       "      <td>3799.5900</td>\n",
       "      <td>3816.6800</td>\n",
       "      <td>3828.9700</td>\n",
       "      <td>3778.9200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-02</th>\n",
       "      <td>3848.3200</td>\n",
       "      <td>3803.6900</td>\n",
       "      <td>3855.7800</td>\n",
       "      <td>3799.8200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-03</th>\n",
       "      <td>3853.6100</td>\n",
       "      <td>3852.5800</td>\n",
       "      <td>3856.6800</td>\n",
       "      <td>3833.7600</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-04</th>\n",
       "      <td>3886.0000</td>\n",
       "      <td>3848.6500</td>\n",
       "      <td>3886.0000</td>\n",
       "      <td>3846.4200</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-05</th>\n",
       "      <td>3925.3200</td>\n",
       "      <td>3909.2100</td>\n",
       "      <td>3970.0000</td>\n",
       "      <td>3909.2100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-06</th>\n",
       "      <td>3948.5100</td>\n",
       "      <td>3946.6900</td>\n",
       "      <td>3948.5400</td>\n",
       "      <td>3922.3400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-09</th>\n",
       "      <td>3972.9500</td>\n",
       "      <td>3980.9600</td>\n",
       "      <td>3985.2400</td>\n",
       "      <td>3954.8800</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-10</th>\n",
       "      <td>3959.2600</td>\n",
       "      <td>3976.8700</td>\n",
       "      <td>3976.9200</td>\n",
       "      <td>3938.7400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-11</th>\n",
       "      <td>3930.1000</td>\n",
       "      <td>3969.6800</td>\n",
       "      <td>3971.2200</td>\n",
       "      <td>3922.9500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-12</th>\n",
       "      <td>3972.3800</td>\n",
       "      <td>3944.6900</td>\n",
       "      <td>3975.9300</td>\n",
       "      <td>3933.4400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-16</th>\n",
       "      <td>3957.7200</td>\n",
       "      <td>3981.3600</td>\n",
       "      <td>3982.2000</td>\n",
       "      <td>3943.3700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-17</th>\n",
       "      <td>3891.2200</td>\n",
       "      <td>3947.1600</td>\n",
       "      <td>3947.1600</td>\n",
       "      <td>3879.4900</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-18</th>\n",
       "      <td>3910.0800</td>\n",
       "      <td>3902.9900</td>\n",
       "      <td>3923.1500</td>\n",
       "      <td>3902.5100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-19</th>\n",
       "      <td>3924.3800</td>\n",
       "      <td>3923.9600</td>\n",
       "      <td>3924.3800</td>\n",
       "      <td>3897.0700</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-20</th>\n",
       "      <td>3935.6500</td>\n",
       "      <td>3933.4600</td>\n",
       "      <td>3942.2200</td>\n",
       "      <td>3921.4100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-23</th>\n",
       "      <td>3890.6600</td>\n",
       "      <td>3925.1900</td>\n",
       "      <td>3925.1900</td>\n",
       "      <td>3868.2100</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-24</th>\n",
       "      <td>3901.0800</td>\n",
       "      <td>3895.8700</td>\n",
       "      <td>3927.0100</td>\n",
       "      <td>3886.1400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-25</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3887.5548</td>\n",
       "      <td>3889.8390</td>\n",
       "      <td>3867.2277</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-26</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-27</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-30</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65 rows × 4 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                close       open       high        low\n",
       "2019-07-01  3935.8100  3899.3300  3936.6700  3886.9100\n",
       "2019-07-02  3937.1700  3931.0500  3942.4300  3918.9400\n",
       "2019-07-03  3893.5300  3927.4400  3927.4400  3878.8400\n",
       "2019-07-04  3873.1000  3895.2000  3906.8900  3854.6900\n",
       "2019-07-05  3893.2000  3875.3700  3900.3100  3857.9300\n",
       "2019-07-08  3802.7900  3875.7500  3875.7500  3775.0300\n",
       "2019-07-09  3793.1300  3798.1000  3811.1000  3774.7600\n",
       "2019-07-10  3786.7400  3807.9500  3810.4000  3774.2300\n",
       "2019-07-11  3785.2200  3806.1900  3830.7400  3774.4100\n",
       "2019-07-12  3808.7300  3783.0700  3820.2400  3774.5200\n",
       "2019-07-15  3824.1900  3792.6400  3844.8700  3745.8500\n",
       "2019-07-16  3806.8400  3819.2500  3828.3300  3799.8700\n",
       "2019-07-17  3804.6400  3800.1100  3820.2700  3787.9000\n",
       "2019-07-18  3768.4000  3793.1900  3793.3900  3768.0000\n",
       "2019-07-19  3807.9600  3787.5100  3828.1500  3787.5100\n",
       "2019-07-22  3781.6800  3813.5000  3816.5400  3765.4400\n",
       "2019-07-23  3789.9100  3783.5400  3792.9600  3768.7600\n",
       "2019-07-24  3819.8300  3803.5900  3840.0600  3803.5700\n",
       "2019-07-25  3851.0700  3821.3900  3851.0700  3812.9500\n",
       "2019-07-26  3858.5700  3835.2300  3863.5900  3832.5200\n",
       "2019-07-29  3854.2700  3857.9400  3862.7500  3842.4300\n",
       "2019-07-30  3870.3200  3861.5700  3890.7300  3861.5700\n",
       "2019-07-31  3835.3600  3856.7400  3856.7400  3830.0900\n",
       "2019-08-01  3803.4700  3819.3200  3831.2600  3791.5500\n",
       "2019-08-02  3747.4400  3729.1300  3754.5300  3720.0600\n",
       "2019-08-05  3675.6900  3724.4100  3739.5000  3675.6900\n",
       "2019-08-06  3636.3300  3609.1100  3649.9000  3575.8600\n",
       "2019-08-07  3621.4300  3654.6300  3659.0800  3621.4300\n",
       "2019-08-08  3669.2900  3651.3600  3675.4600  3646.9400\n",
       "2019-08-09  3633.5300  3686.7500  3689.1800  3628.1200\n",
       "...               ...        ...        ...        ...\n",
       "2019-08-19  3791.0900  3736.0300  3791.0900  3720.6900\n",
       "2019-08-20  3787.7300  3786.0300  3799.9000  3778.7300\n",
       "2019-08-21  3781.7600  3778.3100  3792.6000  3775.4500\n",
       "2019-08-22  3793.5100  3793.8600  3797.3300  3771.2000\n",
       "2019-08-23  3820.8600  3796.8800  3829.3600  3788.0300\n",
       "2019-08-26  3765.9100  3756.3600  3778.8700  3753.1600\n",
       "2019-08-27  3816.9500  3791.4600  3848.2400  3790.8700\n",
       "2019-08-28  3802.5800  3818.8100  3822.5900  3790.1400\n",
       "2019-08-29  3790.1900  3805.4900  3808.6000  3774.4000\n",
       "2019-08-30  3799.5900  3816.6800  3828.9700  3778.9200\n",
       "2019-09-02  3848.3200  3803.6900  3855.7800  3799.8200\n",
       "2019-09-03  3853.6100  3852.5800  3856.6800  3833.7600\n",
       "2019-09-04  3886.0000  3848.6500  3886.0000  3846.4200\n",
       "2019-09-05  3925.3200  3909.2100  3970.0000  3909.2100\n",
       "2019-09-06  3948.5100  3946.6900  3948.5400  3922.3400\n",
       "2019-09-09  3972.9500  3980.9600  3985.2400  3954.8800\n",
       "2019-09-10  3959.2600  3976.8700  3976.9200  3938.7400\n",
       "2019-09-11  3930.1000  3969.6800  3971.2200  3922.9500\n",
       "2019-09-12  3972.3800  3944.6900  3975.9300  3933.4400\n",
       "2019-09-16  3957.7200  3981.3600  3982.2000  3943.3700\n",
       "2019-09-17  3891.2200  3947.1600  3947.1600  3879.4900\n",
       "2019-09-18  3910.0800  3902.9900  3923.1500  3902.5100\n",
       "2019-09-19  3924.3800  3923.9600  3924.3800  3897.0700\n",
       "2019-09-20  3935.6500  3933.4600  3942.2200  3921.4100\n",
       "2019-09-23  3890.6600  3925.1900  3925.1900  3868.2100\n",
       "2019-09-24  3901.0800  3895.8700  3927.0100  3886.1400\n",
       "2019-09-25  3870.9837  3887.5548  3889.8390  3867.2277\n",
       "2019-09-26  3870.9837  3870.9837  3870.9837  3870.9837\n",
       "2019-09-27  3870.9837  3870.9837  3870.9837  3870.9837\n",
       "2019-09-30  3870.9837  3870.9837  3870.9837  3870.9837\n",
       "\n",
       "[65 rows x 4 columns]"
      ]
     },
     "execution_count": 152,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 获取HS300周K收盘价\n",
    "df = get_price('000300.XSHG', start_date='2019-07-01', end_date='2019-09-30', frequency='1d', fields=['close','open','high','low'], skip_paused=False, fq='pre')\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 153,
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "2019-07-01         NaN\n",
      "2019-07-02         NaN\n",
      "2019-07-03         NaN\n",
      "2019-07-04         NaN\n",
      "2019-07-05         NaN\n",
      "2019-07-08         NaN\n",
      "2019-07-09         NaN\n",
      "2019-07-10         NaN\n",
      "2019-07-11         NaN\n",
      "2019-07-12    3850.942\n",
      "2019-07-15    3839.780\n",
      "2019-07-16    3826.747\n",
      "2019-07-17    3817.858\n",
      "2019-07-18    3807.388\n",
      "2019-07-19    3798.864\n",
      "2019-07-22    3796.753\n",
      "2019-07-23    3796.431\n",
      "2019-07-24    3799.740\n",
      "2019-07-25    3806.325\n",
      "2019-07-26    3811.309\n",
      "Name: close, dtype: float64\n"
     ]
    }
   ],
   "source": [
    "print(df[\"close\"].rolling(window=10).mean().head(20))"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 154,
   "metadata": {
    "scrolled": true
   },
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>close</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>SMA</th>\n",
       "      <th>EMA</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-07-01</th>\n",
       "      <td>3935.8100</td>\n",
       "      <td>3899.3300</td>\n",
       "      <td>3936.6700</td>\n",
       "      <td>3886.9100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-02</th>\n",
       "      <td>3937.1700</td>\n",
       "      <td>3931.0500</td>\n",
       "      <td>3942.4300</td>\n",
       "      <td>3918.9400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-03</th>\n",
       "      <td>3893.5300</td>\n",
       "      <td>3927.4400</td>\n",
       "      <td>3927.4400</td>\n",
       "      <td>3878.8400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-04</th>\n",
       "      <td>3873.1000</td>\n",
       "      <td>3895.2000</td>\n",
       "      <td>3906.8900</td>\n",
       "      <td>3854.6900</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-05</th>\n",
       "      <td>3893.2000</td>\n",
       "      <td>3875.3700</td>\n",
       "      <td>3900.3100</td>\n",
       "      <td>3857.9300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-08</th>\n",
       "      <td>3802.7900</td>\n",
       "      <td>3875.7500</td>\n",
       "      <td>3875.7500</td>\n",
       "      <td>3775.0300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-09</th>\n",
       "      <td>3793.1300</td>\n",
       "      <td>3798.1000</td>\n",
       "      <td>3811.1000</td>\n",
       "      <td>3774.7600</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-10</th>\n",
       "      <td>3786.7400</td>\n",
       "      <td>3807.9500</td>\n",
       "      <td>3810.4000</td>\n",
       "      <td>3774.2300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-11</th>\n",
       "      <td>3785.2200</td>\n",
       "      <td>3806.1900</td>\n",
       "      <td>3830.7400</td>\n",
       "      <td>3774.4100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-12</th>\n",
       "      <td>3808.7300</td>\n",
       "      <td>3783.0700</td>\n",
       "      <td>3820.2400</td>\n",
       "      <td>3774.5200</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-15</th>\n",
       "      <td>3824.1900</td>\n",
       "      <td>3792.6400</td>\n",
       "      <td>3844.8700</td>\n",
       "      <td>3745.8500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-16</th>\n",
       "      <td>3806.8400</td>\n",
       "      <td>3819.2500</td>\n",
       "      <td>3828.3300</td>\n",
       "      <td>3799.8700</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-17</th>\n",
       "      <td>3804.6400</td>\n",
       "      <td>3800.1100</td>\n",
       "      <td>3820.2700</td>\n",
       "      <td>3787.9000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-18</th>\n",
       "      <td>3768.4000</td>\n",
       "      <td>3793.1900</td>\n",
       "      <td>3793.3900</td>\n",
       "      <td>3768.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-19</th>\n",
       "      <td>3807.9600</td>\n",
       "      <td>3787.5100</td>\n",
       "      <td>3828.1500</td>\n",
       "      <td>3787.5100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-22</th>\n",
       "      <td>3781.6800</td>\n",
       "      <td>3813.5000</td>\n",
       "      <td>3816.5400</td>\n",
       "      <td>3765.4400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-23</th>\n",
       "      <td>3789.9100</td>\n",
       "      <td>3783.5400</td>\n",
       "      <td>3792.9600</td>\n",
       "      <td>3768.7600</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-24</th>\n",
       "      <td>3819.8300</td>\n",
       "      <td>3803.5900</td>\n",
       "      <td>3840.0600</td>\n",
       "      <td>3803.5700</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-25</th>\n",
       "      <td>3851.0700</td>\n",
       "      <td>3821.3900</td>\n",
       "      <td>3851.0700</td>\n",
       "      <td>3812.9500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-26</th>\n",
       "      <td>3858.5700</td>\n",
       "      <td>3835.2300</td>\n",
       "      <td>3863.5900</td>\n",
       "      <td>3832.5200</td>\n",
       "      <td>3831.125500</td>\n",
       "      <td>3831.125500</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-29</th>\n",
       "      <td>3854.2700</td>\n",
       "      <td>3857.9400</td>\n",
       "      <td>3862.7500</td>\n",
       "      <td>3842.4300</td>\n",
       "      <td>3827.048500</td>\n",
       "      <td>3833.329738</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-30</th>\n",
       "      <td>3870.3200</td>\n",
       "      <td>3861.5700</td>\n",
       "      <td>3890.7300</td>\n",
       "      <td>3861.5700</td>\n",
       "      <td>3823.706000</td>\n",
       "      <td>3836.852620</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-31</th>\n",
       "      <td>3835.3600</td>\n",
       "      <td>3856.7400</td>\n",
       "      <td>3856.7400</td>\n",
       "      <td>3830.0900</td>\n",
       "      <td>3820.797500</td>\n",
       "      <td>3836.710466</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-01</th>\n",
       "      <td>3803.4700</td>\n",
       "      <td>3819.3200</td>\n",
       "      <td>3831.2600</td>\n",
       "      <td>3791.5500</td>\n",
       "      <td>3817.316000</td>\n",
       "      <td>3833.544707</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-02</th>\n",
       "      <td>3747.4400</td>\n",
       "      <td>3729.1300</td>\n",
       "      <td>3754.5300</td>\n",
       "      <td>3720.0600</td>\n",
       "      <td>3810.028000</td>\n",
       "      <td>3825.344259</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-05</th>\n",
       "      <td>3675.6900</td>\n",
       "      <td>3724.4100</td>\n",
       "      <td>3739.5000</td>\n",
       "      <td>3675.6900</td>\n",
       "      <td>3803.673000</td>\n",
       "      <td>3811.091472</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-06</th>\n",
       "      <td>3636.3300</td>\n",
       "      <td>3609.1100</td>\n",
       "      <td>3649.9000</td>\n",
       "      <td>3575.8600</td>\n",
       "      <td>3795.833000</td>\n",
       "      <td>3794.447523</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-07</th>\n",
       "      <td>3621.4300</td>\n",
       "      <td>3654.6300</td>\n",
       "      <td>3659.0800</td>\n",
       "      <td>3621.4300</td>\n",
       "      <td>3787.567500</td>\n",
       "      <td>3777.969663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-08</th>\n",
       "      <td>3669.2900</td>\n",
       "      <td>3651.3600</td>\n",
       "      <td>3675.4600</td>\n",
       "      <td>3646.9400</td>\n",
       "      <td>3781.771000</td>\n",
       "      <td>3767.619219</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-09</th>\n",
       "      <td>3633.5300</td>\n",
       "      <td>3686.7500</td>\n",
       "      <td>3689.1800</td>\n",
       "      <td>3628.1200</td>\n",
       "      <td>3773.011000</td>\n",
       "      <td>3754.848817</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-19</th>\n",
       "      <td>3791.0900</td>\n",
       "      <td>3736.0300</td>\n",
       "      <td>3791.0900</td>\n",
       "      <td>3720.6900</td>\n",
       "      <td>3745.469500</td>\n",
       "      <td>3735.723080</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-20</th>\n",
       "      <td>3787.7300</td>\n",
       "      <td>3786.0300</td>\n",
       "      <td>3799.9000</td>\n",
       "      <td>3778.7300</td>\n",
       "      <td>3745.360500</td>\n",
       "      <td>3740.676120</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-21</th>\n",
       "      <td>3781.7600</td>\n",
       "      <td>3778.3100</td>\n",
       "      <td>3792.6000</td>\n",
       "      <td>3775.4500</td>\n",
       "      <td>3743.457000</td>\n",
       "      <td>3744.588870</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-22</th>\n",
       "      <td>3793.5100</td>\n",
       "      <td>3793.8600</td>\n",
       "      <td>3797.3300</td>\n",
       "      <td>3771.2000</td>\n",
       "      <td>3740.579000</td>\n",
       "      <td>3749.248025</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-23</th>\n",
       "      <td>3820.8600</td>\n",
       "      <td>3796.8800</td>\n",
       "      <td>3829.3600</td>\n",
       "      <td>3788.0300</td>\n",
       "      <td>3738.693500</td>\n",
       "      <td>3756.068213</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-26</th>\n",
       "      <td>3765.9100</td>\n",
       "      <td>3756.3600</td>\n",
       "      <td>3778.8700</td>\n",
       "      <td>3753.1600</td>\n",
       "      <td>3734.275500</td>\n",
       "      <td>3757.005526</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-27</th>\n",
       "      <td>3816.9500</td>\n",
       "      <td>3791.4600</td>\n",
       "      <td>3848.2400</td>\n",
       "      <td>3790.8700</td>\n",
       "      <td>3731.607000</td>\n",
       "      <td>3762.714524</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-28</th>\n",
       "      <td>3802.5800</td>\n",
       "      <td>3818.8100</td>\n",
       "      <td>3822.5900</td>\n",
       "      <td>3790.1400</td>\n",
       "      <td>3729.968000</td>\n",
       "      <td>3766.511236</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-29</th>\n",
       "      <td>3790.1900</td>\n",
       "      <td>3805.4900</td>\n",
       "      <td>3808.6000</td>\n",
       "      <td>3774.4000</td>\n",
       "      <td>3729.304000</td>\n",
       "      <td>3768.766356</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-30</th>\n",
       "      <td>3799.5900</td>\n",
       "      <td>3816.6800</td>\n",
       "      <td>3828.9700</td>\n",
       "      <td>3778.9200</td>\n",
       "      <td>3731.911500</td>\n",
       "      <td>3771.701941</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-02</th>\n",
       "      <td>3848.3200</td>\n",
       "      <td>3803.6900</td>\n",
       "      <td>3855.7800</td>\n",
       "      <td>3799.8200</td>\n",
       "      <td>3740.543000</td>\n",
       "      <td>3778.998899</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-03</th>\n",
       "      <td>3853.6100</td>\n",
       "      <td>3852.5800</td>\n",
       "      <td>3856.6800</td>\n",
       "      <td>3833.7600</td>\n",
       "      <td>3751.407000</td>\n",
       "      <td>3786.104718</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-04</th>\n",
       "      <td>3886.0000</td>\n",
       "      <td>3848.6500</td>\n",
       "      <td>3886.0000</td>\n",
       "      <td>3846.4200</td>\n",
       "      <td>3764.635500</td>\n",
       "      <td>3795.618555</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-05</th>\n",
       "      <td>3925.3200</td>\n",
       "      <td>3909.2100</td>\n",
       "      <td>3970.0000</td>\n",
       "      <td>3909.2100</td>\n",
       "      <td>3777.437000</td>\n",
       "      <td>3807.971073</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-06</th>\n",
       "      <td>3948.5100</td>\n",
       "      <td>3946.6900</td>\n",
       "      <td>3948.5400</td>\n",
       "      <td>3922.3400</td>\n",
       "      <td>3793.186000</td>\n",
       "      <td>3821.355733</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-09</th>\n",
       "      <td>3972.9500</td>\n",
       "      <td>3980.9600</td>\n",
       "      <td>3985.2400</td>\n",
       "      <td>3954.8800</td>\n",
       "      <td>3806.878500</td>\n",
       "      <td>3835.793282</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-10</th>\n",
       "      <td>3959.2600</td>\n",
       "      <td>3976.8700</td>\n",
       "      <td>3976.9200</td>\n",
       "      <td>3938.7400</td>\n",
       "      <td>3821.554000</td>\n",
       "      <td>3847.552017</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-11</th>\n",
       "      <td>3930.1000</td>\n",
       "      <td>3969.6800</td>\n",
       "      <td>3971.2200</td>\n",
       "      <td>3922.9500</td>\n",
       "      <td>3833.939000</td>\n",
       "      <td>3855.413730</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-12</th>\n",
       "      <td>3972.3800</td>\n",
       "      <td>3944.6900</td>\n",
       "      <td>3975.9300</td>\n",
       "      <td>3933.4400</td>\n",
       "      <td>3847.858000</td>\n",
       "      <td>3866.553375</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-16</th>\n",
       "      <td>3957.7200</td>\n",
       "      <td>3981.3600</td>\n",
       "      <td>3982.2000</td>\n",
       "      <td>3943.3700</td>\n",
       "      <td>3860.217000</td>\n",
       "      <td>3875.235910</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-17</th>\n",
       "      <td>3891.2200</td>\n",
       "      <td>3947.1600</td>\n",
       "      <td>3947.1600</td>\n",
       "      <td>3879.4900</td>\n",
       "      <td>3865.223500</td>\n",
       "      <td>3876.758205</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-18</th>\n",
       "      <td>3910.0800</td>\n",
       "      <td>3902.9900</td>\n",
       "      <td>3923.1500</td>\n",
       "      <td>3902.5100</td>\n",
       "      <td>3871.341000</td>\n",
       "      <td>3879.931709</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-19</th>\n",
       "      <td>3924.3800</td>\n",
       "      <td>3923.9600</td>\n",
       "      <td>3924.3800</td>\n",
       "      <td>3897.0700</td>\n",
       "      <td>3878.472000</td>\n",
       "      <td>3884.164880</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-20</th>\n",
       "      <td>3935.6500</td>\n",
       "      <td>3933.4600</td>\n",
       "      <td>3942.2200</td>\n",
       "      <td>3921.4100</td>\n",
       "      <td>3885.579000</td>\n",
       "      <td>3889.068224</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-23</th>\n",
       "      <td>3890.6600</td>\n",
       "      <td>3925.1900</td>\n",
       "      <td>3925.1900</td>\n",
       "      <td>3868.2100</td>\n",
       "      <td>3889.069000</td>\n",
       "      <td>3889.219822</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-24</th>\n",
       "      <td>3901.0800</td>\n",
       "      <td>3895.8700</td>\n",
       "      <td>3927.0100</td>\n",
       "      <td>3886.1400</td>\n",
       "      <td>3895.827500</td>\n",
       "      <td>3890.349363</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-25</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3887.5548</td>\n",
       "      <td>3889.8390</td>\n",
       "      <td>3867.2277</td>\n",
       "      <td>3898.529185</td>\n",
       "      <td>3888.505014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-26</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3901.949370</td>\n",
       "      <td>3886.836317</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-27</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3905.989055</td>\n",
       "      <td>3885.326544</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-30</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3909.558740</td>\n",
       "      <td>3883.960559</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65 rows × 6 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                close       open       high        low          SMA  \\\n",
       "2019-07-01  3935.8100  3899.3300  3936.6700  3886.9100          NaN   \n",
       "2019-07-02  3937.1700  3931.0500  3942.4300  3918.9400          NaN   \n",
       "2019-07-03  3893.5300  3927.4400  3927.4400  3878.8400          NaN   \n",
       "2019-07-04  3873.1000  3895.2000  3906.8900  3854.6900          NaN   \n",
       "2019-07-05  3893.2000  3875.3700  3900.3100  3857.9300          NaN   \n",
       "2019-07-08  3802.7900  3875.7500  3875.7500  3775.0300          NaN   \n",
       "2019-07-09  3793.1300  3798.1000  3811.1000  3774.7600          NaN   \n",
       "2019-07-10  3786.7400  3807.9500  3810.4000  3774.2300          NaN   \n",
       "2019-07-11  3785.2200  3806.1900  3830.7400  3774.4100          NaN   \n",
       "2019-07-12  3808.7300  3783.0700  3820.2400  3774.5200          NaN   \n",
       "2019-07-15  3824.1900  3792.6400  3844.8700  3745.8500          NaN   \n",
       "2019-07-16  3806.8400  3819.2500  3828.3300  3799.8700          NaN   \n",
       "2019-07-17  3804.6400  3800.1100  3820.2700  3787.9000          NaN   \n",
       "2019-07-18  3768.4000  3793.1900  3793.3900  3768.0000          NaN   \n",
       "2019-07-19  3807.9600  3787.5100  3828.1500  3787.5100          NaN   \n",
       "2019-07-22  3781.6800  3813.5000  3816.5400  3765.4400          NaN   \n",
       "2019-07-23  3789.9100  3783.5400  3792.9600  3768.7600          NaN   \n",
       "2019-07-24  3819.8300  3803.5900  3840.0600  3803.5700          NaN   \n",
       "2019-07-25  3851.0700  3821.3900  3851.0700  3812.9500          NaN   \n",
       "2019-07-26  3858.5700  3835.2300  3863.5900  3832.5200  3831.125500   \n",
       "2019-07-29  3854.2700  3857.9400  3862.7500  3842.4300  3827.048500   \n",
       "2019-07-30  3870.3200  3861.5700  3890.7300  3861.5700  3823.706000   \n",
       "2019-07-31  3835.3600  3856.7400  3856.7400  3830.0900  3820.797500   \n",
       "2019-08-01  3803.4700  3819.3200  3831.2600  3791.5500  3817.316000   \n",
       "2019-08-02  3747.4400  3729.1300  3754.5300  3720.0600  3810.028000   \n",
       "2019-08-05  3675.6900  3724.4100  3739.5000  3675.6900  3803.673000   \n",
       "2019-08-06  3636.3300  3609.1100  3649.9000  3575.8600  3795.833000   \n",
       "2019-08-07  3621.4300  3654.6300  3659.0800  3621.4300  3787.567500   \n",
       "2019-08-08  3669.2900  3651.3600  3675.4600  3646.9400  3781.771000   \n",
       "2019-08-09  3633.5300  3686.7500  3689.1800  3628.1200  3773.011000   \n",
       "...               ...        ...        ...        ...          ...   \n",
       "2019-08-19  3791.0900  3736.0300  3791.0900  3720.6900  3745.469500   \n",
       "2019-08-20  3787.7300  3786.0300  3799.9000  3778.7300  3745.360500   \n",
       "2019-08-21  3781.7600  3778.3100  3792.6000  3775.4500  3743.457000   \n",
       "2019-08-22  3793.5100  3793.8600  3797.3300  3771.2000  3740.579000   \n",
       "2019-08-23  3820.8600  3796.8800  3829.3600  3788.0300  3738.693500   \n",
       "2019-08-26  3765.9100  3756.3600  3778.8700  3753.1600  3734.275500   \n",
       "2019-08-27  3816.9500  3791.4600  3848.2400  3790.8700  3731.607000   \n",
       "2019-08-28  3802.5800  3818.8100  3822.5900  3790.1400  3729.968000   \n",
       "2019-08-29  3790.1900  3805.4900  3808.6000  3774.4000  3729.304000   \n",
       "2019-08-30  3799.5900  3816.6800  3828.9700  3778.9200  3731.911500   \n",
       "2019-09-02  3848.3200  3803.6900  3855.7800  3799.8200  3740.543000   \n",
       "2019-09-03  3853.6100  3852.5800  3856.6800  3833.7600  3751.407000   \n",
       "2019-09-04  3886.0000  3848.6500  3886.0000  3846.4200  3764.635500   \n",
       "2019-09-05  3925.3200  3909.2100  3970.0000  3909.2100  3777.437000   \n",
       "2019-09-06  3948.5100  3946.6900  3948.5400  3922.3400  3793.186000   \n",
       "2019-09-09  3972.9500  3980.9600  3985.2400  3954.8800  3806.878500   \n",
       "2019-09-10  3959.2600  3976.8700  3976.9200  3938.7400  3821.554000   \n",
       "2019-09-11  3930.1000  3969.6800  3971.2200  3922.9500  3833.939000   \n",
       "2019-09-12  3972.3800  3944.6900  3975.9300  3933.4400  3847.858000   \n",
       "2019-09-16  3957.7200  3981.3600  3982.2000  3943.3700  3860.217000   \n",
       "2019-09-17  3891.2200  3947.1600  3947.1600  3879.4900  3865.223500   \n",
       "2019-09-18  3910.0800  3902.9900  3923.1500  3902.5100  3871.341000   \n",
       "2019-09-19  3924.3800  3923.9600  3924.3800  3897.0700  3878.472000   \n",
       "2019-09-20  3935.6500  3933.4600  3942.2200  3921.4100  3885.579000   \n",
       "2019-09-23  3890.6600  3925.1900  3925.1900  3868.2100  3889.069000   \n",
       "2019-09-24  3901.0800  3895.8700  3927.0100  3886.1400  3895.827500   \n",
       "2019-09-25  3870.9837  3887.5548  3889.8390  3867.2277  3898.529185   \n",
       "2019-09-26  3870.9837  3870.9837  3870.9837  3870.9837  3901.949370   \n",
       "2019-09-27  3870.9837  3870.9837  3870.9837  3870.9837  3905.989055   \n",
       "2019-09-30  3870.9837  3870.9837  3870.9837  3870.9837  3909.558740   \n",
       "\n",
       "                    EMA  \n",
       "2019-07-01          NaN  \n",
       "2019-07-02          NaN  \n",
       "2019-07-03          NaN  \n",
       "2019-07-04          NaN  \n",
       "2019-07-05          NaN  \n",
       "2019-07-08          NaN  \n",
       "2019-07-09          NaN  \n",
       "2019-07-10          NaN  \n",
       "2019-07-11          NaN  \n",
       "2019-07-12          NaN  \n",
       "2019-07-15          NaN  \n",
       "2019-07-16          NaN  \n",
       "2019-07-17          NaN  \n",
       "2019-07-18          NaN  \n",
       "2019-07-19          NaN  \n",
       "2019-07-22          NaN  \n",
       "2019-07-23          NaN  \n",
       "2019-07-24          NaN  \n",
       "2019-07-25          NaN  \n",
       "2019-07-26  3831.125500  \n",
       "2019-07-29  3833.329738  \n",
       "2019-07-30  3836.852620  \n",
       "2019-07-31  3836.710466  \n",
       "2019-08-01  3833.544707  \n",
       "2019-08-02  3825.344259  \n",
       "2019-08-05  3811.091472  \n",
       "2019-08-06  3794.447523  \n",
       "2019-08-07  3777.969663  \n",
       "2019-08-08  3767.619219  \n",
       "2019-08-09  3754.848817  \n",
       "...                 ...  \n",
       "2019-08-19  3735.723080  \n",
       "2019-08-20  3740.676120  \n",
       "2019-08-21  3744.588870  \n",
       "2019-08-22  3749.248025  \n",
       "2019-08-23  3756.068213  \n",
       "2019-08-26  3757.005526  \n",
       "2019-08-27  3762.714524  \n",
       "2019-08-28  3766.511236  \n",
       "2019-08-29  3768.766356  \n",
       "2019-08-30  3771.701941  \n",
       "2019-09-02  3778.998899  \n",
       "2019-09-03  3786.104718  \n",
       "2019-09-04  3795.618555  \n",
       "2019-09-05  3807.971073  \n",
       "2019-09-06  3821.355733  \n",
       "2019-09-09  3835.793282  \n",
       "2019-09-10  3847.552017  \n",
       "2019-09-11  3855.413730  \n",
       "2019-09-12  3866.553375  \n",
       "2019-09-16  3875.235910  \n",
       "2019-09-17  3876.758205  \n",
       "2019-09-18  3879.931709  \n",
       "2019-09-19  3884.164880  \n",
       "2019-09-20  3889.068224  \n",
       "2019-09-23  3889.219822  \n",
       "2019-09-24  3890.349363  \n",
       "2019-09-25  3888.505014  \n",
       "2019-09-26  3886.836317  \n",
       "2019-09-27  3885.326544  \n",
       "2019-09-30  3883.960559  \n",
       "\n",
       "[65 rows x 6 columns]"
      ]
     },
     "execution_count": 154,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['SMA'] = ta.MA(df['close'], 20)\n",
    "df['EMA']  = ta.EMA(df['close'], 20)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 155,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "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iYhcpkxICI77/xvqNcBc180T4ImIiEi5xcfHM3nyZMaMGVPseGJiIlOnTiU5OZnk5GRSU1M5fvw433//fRk5VY565kRELmOmYWMcT/0V6oTUdFFERET8zi/nzA0aNIgZM2Z4fzbGMHFiyb1WExMTeeONN4odGzZsGImJiTzwwAM+K5+xP98cwQ8dPXq0potQQsOGDcnIyKjpYoiPqV6lMtRuah/VqVSG2k3tozqteXl5eYSFhdV0MYr5+Zy56lDaZ27atGmZ12uYpYiIiIiISABSMCciIiIiIhKAFMyJiIiIiIgEIAVzIiIiIiLid/x8aY9qUdHPrGBORERERET8jsPhqNbFRvxNUVERDkfFwjNtTSAiIiIiIn4nNDSU/Px8CgoK/GYv1JCQEAoKCnyer7UWh8NBaGhohdIpmBMREREREb9jjKFu3bo1XYxi/G3LCg2zFBERERERCUAK5kRERERERAKQgjkREREREZEAZOzluOaniIiIiIhIgFPPXCVMnz69posg1UD1KpWhdlP7qE6lMtRuah/VqZTG39qFgjkREREREZEApGBOREREREQkAAU9+eSTT9Z0IQJRmzZtaroIUg1Ur1IZaje1j+pUKkPtpvZRnUpp/KldaAEUERERERGRAKRhliIiIiIiIgHIWdMF8IWMjAwWLlxIVlYWxhgSEhIYMWIEp0+f5oUXXuCHH37gyiuv5I9//CP16tXjyJEjLFq0iAMHDnDbbbcxatQob14ffPABH3/8MdZaBg8ezM0331zqPbdt28aSJUtwu90MHjyYMWPGAPDEE09w9uxZAHJycmjbti3Tpk0rkT49PZ358+dz+vRpWrduzeTJk3E6nezatYvXX3+dQ4cOMWXKFHr27FkNT8z/BWKdrlmzhvfff58TJ07w6quv0qBBAwB27tzJ7NmzadSoEQDx8fGMHTvWp89LfuJPbeebb77hjTfewO12ExoaygMPPECTJk1KpP/2229ZuHAh586d44YbbuCuu+7CGMPmzZt56623OHLkCM888wxt27atnofm5wKxTv/5z3+yYcMGTp8+zbJly7zHP/30U5YtW0ZUVBQAw4YNY/Dgwb58XPIjf2o3O3bsYNmyZRQVFdG6dWsmTZpEUFBQifR6N7iwQKxTvRtUv5poF4sWLSI1NZWIiAjmzp3rPV7WPX/Jp991WwtkZmba/fv3W2utzcvLsw899JA9fPiwXbZsmV25cqW11tqVK1faZcuWWWutzcrKsvv27bPLly+3iYmJ3nwOHTpkp06davPz821RUZGdNWuWPXr0aIn7uVwu++CDD9rjx4/bwsJC+8gjj9jDhw+XuG7OnDn2008/LbXMc+fOtZ9//rm11tq//e1vdu3atdZaa0+cOGEPHjxoX3rpJbt58+YqPJXAFoh1+u2339oTJ07Y+++/32ZnZ3uP79ixwz777LOVfxhSIf7Uds7f21pr16xZY//yl7+UWubp06fbPXv2WLfbbZ9++mmbmppqrbX28OHD9siRI3bmzJk2LS3NR08o8ARine7Zs8dmZmba22+/vdjxTz75xL766qtVfCJSHv7Sblwul504caI9cuSItdbaFStW2I8//rjUMuvd4MICsU71blD9LnW7sNbanTt32v3799upU6cWO17WPX/Jl9/1WjHMMjIy0jsRsW7dujRr1ozMzEy2bt1K//79Aejfvz9bt24FICIignbt2pX4C8qRI0eIiYkhJCSEoKAgOnbsSEpKSon7paWl0aRJExo3bozT6aR3797evM87e/YsO3fuJC4urkR6ay07d+70RtsDBgzwpm/UqBGtWrXCGFPFpxLYAq1OAVq3bu39C5vUHH9rO+d7dfPy8oiMjCyR/tSpU5w9e5b27dtjjOHGG2/0pm/evDlNmzb1wVMJbIFWpwDt27cv85xcGv7Sbk6fPo3T6fR+lzt37kxycnKJ9Ho3uLhAq1PQu8GlcKnbBcC1115bao9bWff8OV9/12tFMPdz6enpHDhwgHbt2pGdne39ZRoZGUlOTs4F07Zo0YLdu3eTm5tLQUEBX331FSdPnixxXWZmJtHR0d6fo6OjyczMLHZNSkoKnTp1IiwsrET63NxcwsLCvI0oKiqqRHr5SSDU6cXs3buXRx99lGeeeYbDhw9XOL1UTk23nYkTJ/Lss88yceJENmzY4B2eU970UlIg1OnFJCcn88gjjzB37lwyMjIqnF4qribbTf369XG5XOzfvx+ALVu2lFrvejeomECo04vRu4HvXYp2cSHluaevv+u1Ys7cefn5+cydO5cJEyZU6oW7efPmjB49mqeeeorQ0FBatWqFw1Ey3rWlLAD6ywh648aNDBo0qMJlkOJqQ522bt2aRYsWERoaSmpqKnPmzGHBggUVzkcqxh/azvvvv8+MGTOIiYkhKSmJpUuXMnHixIuml9IFSp1eSPfu3enTpw/BwcGsW7eOhQsXMnPmzAp/Fim/mm43xhimTJnC66+/TmFhIV26dCl1bpWUX22oU70b+N6lahf+ptYEc0VFRcydO5d+/foRHx8PeLpRT506RWRkJKdOnfJOOr2QQYMGeV/Yly9fTnR0NBkZGfz5z38GYMiQIVx99dXFIvWTJ08WG06Tm5tLWloajzzyiPfY008/TVZWFm3btuW+++4jLy8Pl8tFUFAQmZmZ3snw8pNAqtMLvcz9/B+Ubt26sXjxYnJycspVdqkcf2g7OTk5HDp0iJiYGAB69+7N008/jdvt5rHHHgMgNjaWoUOHlkivfw9KCqQ6vfXWW8u8f/369b3/n5CQwD/+8Y8KPgmpCH9oN+AZdjtr1iwAtm/fztGjRwG9G1RGINWp3g0unUvZLoYOHVpm+rLuWZ3f9VoRzFlrefnll2nWrBkjR470Ho+NjeWzzz5jzJgxfPbZZ2XOdfq57OxsIiIiyMjIICUlhaeeeop69eoxZ84c7zUul4tjx46Rnp5OVFQUmzZt4qGHHvKe37x5M926daNOnTreY//zP/9T7D7XXXcdW7ZsoU+fPnz66afExsZW5RHUOoFYp2XJysoiIiICYwxpaWm43e5iL3TiW/7SdsLDw8nLy+Po0aM0bdqUr7/+mmbNmuFwOIqlB88Y/7179xITE8OGDRsYNmyY7x5ILRCIdVqW87/kAb744guaN29ewach5eUv7ebn6QsLC0lMTOSWW24B9G5QUYFYp2XRu4HvXOp2cSFl3bM6v+u1YtPwf//73zzxxBO0bNnSOxRm/PjxxMTE8MILL5CRkUHDhg2ZOnUq9erVIysri+nTp3P27FmMMYSGhjJv3jzCwsJ44oknyM3Nxel0cuedd3L99deXes/U1FRef/113G43AwcO9H6JAZ588knGjBlD165dyyzziRMnSixJGhwcTFpaGs8//zxnzpwhODiYK664gnnz5vn2gQWAQKzTDz74gKSkJO8/0DfccAMTJ05kzZo1rFu3jqCgIOrUqcOdd95Jhw4dfPvAxMuf2k5KSgpvvvkmDoeD8PBwJk2aROPGjUuk379/P4sWLeLcuXN07dqVu+++G2MMKSkp/P3vfycnJ4fw8HCuvvrqcr8o1CaBWKdvvPEGn3/+uTd4GzRoEOPGjWP58uV88cUXBAUFUa9ePX7/+9/TrFmz6nt4lzF/ajfLli0jNTUVt9vN0KFDy1zuXO8GFxaIdap3g+pXE+1i/vz57Nq1i9zcXCIiIhg3bhyDBg0iNze31Hv+ki+/67UimBMREREREbnc+P+sPhERERERESlBwZyIiIiIiEgAUjAnIiIiIiISgBTMiYiIiIiIBCAFcyIiIiIiIgFIwZyIiIiIiEgAUjAnIiIiIiISgBTMiYiIiIiIBKD/D14fWkfwAhnDAAAAAElFTkSuQmCC\n",
      "text/plain": [
       "<Figure size 1080x360 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "fig = plt.figure(figsize=(15, 5))\n",
    "plt.plot(df['close'], label='close')\n",
    "plt.plot(df['SMA'], alpha=0.5, label='SMA')\n",
    "plt.plot(df['EMA'], alpha=0.5, label='EMA')\n",
    "plt.legend(loc='lower right')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 156,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/html": [
       "<div>\n",
       "<style scoped>\n",
       "    .dataframe tbody tr th:only-of-type {\n",
       "        vertical-align: middle;\n",
       "    }\n",
       "\n",
       "    .dataframe tbody tr th {\n",
       "        vertical-align: top;\n",
       "    }\n",
       "\n",
       "    .dataframe thead th {\n",
       "        text-align: right;\n",
       "    }\n",
       "</style>\n",
       "<table border=\"1\" class=\"dataframe\">\n",
       "  <thead>\n",
       "    <tr style=\"text-align: right;\">\n",
       "      <th></th>\n",
       "      <th>close</th>\n",
       "      <th>open</th>\n",
       "      <th>high</th>\n",
       "      <th>low</th>\n",
       "      <th>SMA</th>\n",
       "      <th>EMA</th>\n",
       "      <th>diff</th>\n",
       "      <th>dea</th>\n",
       "      <th>macd</th>\n",
       "    </tr>\n",
       "  </thead>\n",
       "  <tbody>\n",
       "    <tr>\n",
       "      <th>2019-07-01</th>\n",
       "      <td>3935.8100</td>\n",
       "      <td>3899.3300</td>\n",
       "      <td>3936.6700</td>\n",
       "      <td>3886.9100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-02</th>\n",
       "      <td>3937.1700</td>\n",
       "      <td>3931.0500</td>\n",
       "      <td>3942.4300</td>\n",
       "      <td>3918.9400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-03</th>\n",
       "      <td>3893.5300</td>\n",
       "      <td>3927.4400</td>\n",
       "      <td>3927.4400</td>\n",
       "      <td>3878.8400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-04</th>\n",
       "      <td>3873.1000</td>\n",
       "      <td>3895.2000</td>\n",
       "      <td>3906.8900</td>\n",
       "      <td>3854.6900</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-05</th>\n",
       "      <td>3893.2000</td>\n",
       "      <td>3875.3700</td>\n",
       "      <td>3900.3100</td>\n",
       "      <td>3857.9300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-08</th>\n",
       "      <td>3802.7900</td>\n",
       "      <td>3875.7500</td>\n",
       "      <td>3875.7500</td>\n",
       "      <td>3775.0300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-09</th>\n",
       "      <td>3793.1300</td>\n",
       "      <td>3798.1000</td>\n",
       "      <td>3811.1000</td>\n",
       "      <td>3774.7600</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-10</th>\n",
       "      <td>3786.7400</td>\n",
       "      <td>3807.9500</td>\n",
       "      <td>3810.4000</td>\n",
       "      <td>3774.2300</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-11</th>\n",
       "      <td>3785.2200</td>\n",
       "      <td>3806.1900</td>\n",
       "      <td>3830.7400</td>\n",
       "      <td>3774.4100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-12</th>\n",
       "      <td>3808.7300</td>\n",
       "      <td>3783.0700</td>\n",
       "      <td>3820.2400</td>\n",
       "      <td>3774.5200</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-15</th>\n",
       "      <td>3824.1900</td>\n",
       "      <td>3792.6400</td>\n",
       "      <td>3844.8700</td>\n",
       "      <td>3745.8500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-16</th>\n",
       "      <td>3806.8400</td>\n",
       "      <td>3819.2500</td>\n",
       "      <td>3828.3300</td>\n",
       "      <td>3799.8700</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-17</th>\n",
       "      <td>3804.6400</td>\n",
       "      <td>3800.1100</td>\n",
       "      <td>3820.2700</td>\n",
       "      <td>3787.9000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-18</th>\n",
       "      <td>3768.4000</td>\n",
       "      <td>3793.1900</td>\n",
       "      <td>3793.3900</td>\n",
       "      <td>3768.0000</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-19</th>\n",
       "      <td>3807.9600</td>\n",
       "      <td>3787.5100</td>\n",
       "      <td>3828.1500</td>\n",
       "      <td>3787.5100</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-22</th>\n",
       "      <td>3781.6800</td>\n",
       "      <td>3813.5000</td>\n",
       "      <td>3816.5400</td>\n",
       "      <td>3765.4400</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-23</th>\n",
       "      <td>3789.9100</td>\n",
       "      <td>3783.5400</td>\n",
       "      <td>3792.9600</td>\n",
       "      <td>3768.7600</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-24</th>\n",
       "      <td>3819.8300</td>\n",
       "      <td>3803.5900</td>\n",
       "      <td>3840.0600</td>\n",
       "      <td>3803.5700</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-25</th>\n",
       "      <td>3851.0700</td>\n",
       "      <td>3821.3900</td>\n",
       "      <td>3851.0700</td>\n",
       "      <td>3812.9500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-26</th>\n",
       "      <td>3858.5700</td>\n",
       "      <td>3835.2300</td>\n",
       "      <td>3863.5900</td>\n",
       "      <td>3832.5200</td>\n",
       "      <td>3831.125500</td>\n",
       "      <td>3831.125500</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-29</th>\n",
       "      <td>3854.2700</td>\n",
       "      <td>3857.9400</td>\n",
       "      <td>3862.7500</td>\n",
       "      <td>3842.4300</td>\n",
       "      <td>3827.048500</td>\n",
       "      <td>3833.329738</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-30</th>\n",
       "      <td>3870.3200</td>\n",
       "      <td>3861.5700</td>\n",
       "      <td>3890.7300</td>\n",
       "      <td>3861.5700</td>\n",
       "      <td>3823.706000</td>\n",
       "      <td>3836.852620</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-07-31</th>\n",
       "      <td>3835.3600</td>\n",
       "      <td>3856.7400</td>\n",
       "      <td>3856.7400</td>\n",
       "      <td>3830.0900</td>\n",
       "      <td>3820.797500</td>\n",
       "      <td>3836.710466</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-01</th>\n",
       "      <td>3803.4700</td>\n",
       "      <td>3819.3200</td>\n",
       "      <td>3831.2600</td>\n",
       "      <td>3791.5500</td>\n",
       "      <td>3817.316000</td>\n",
       "      <td>3833.544707</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-02</th>\n",
       "      <td>3747.4400</td>\n",
       "      <td>3729.1300</td>\n",
       "      <td>3754.5300</td>\n",
       "      <td>3720.0600</td>\n",
       "      <td>3810.028000</td>\n",
       "      <td>3825.344259</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-05</th>\n",
       "      <td>3675.6900</td>\n",
       "      <td>3724.4100</td>\n",
       "      <td>3739.5000</td>\n",
       "      <td>3675.6900</td>\n",
       "      <td>3803.673000</td>\n",
       "      <td>3811.091472</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-06</th>\n",
       "      <td>3636.3300</td>\n",
       "      <td>3609.1100</td>\n",
       "      <td>3649.9000</td>\n",
       "      <td>3575.8600</td>\n",
       "      <td>3795.833000</td>\n",
       "      <td>3794.447523</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-07</th>\n",
       "      <td>3621.4300</td>\n",
       "      <td>3654.6300</td>\n",
       "      <td>3659.0800</td>\n",
       "      <td>3621.4300</td>\n",
       "      <td>3787.567500</td>\n",
       "      <td>3777.969663</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-08</th>\n",
       "      <td>3669.2900</td>\n",
       "      <td>3651.3600</td>\n",
       "      <td>3675.4600</td>\n",
       "      <td>3646.9400</td>\n",
       "      <td>3781.771000</td>\n",
       "      <td>3767.619219</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-09</th>\n",
       "      <td>3633.5300</td>\n",
       "      <td>3686.7500</td>\n",
       "      <td>3689.1800</td>\n",
       "      <td>3628.1200</td>\n",
       "      <td>3773.011000</td>\n",
       "      <td>3754.848817</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "      <td>NaN</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>...</th>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "      <td>...</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-19</th>\n",
       "      <td>3791.0900</td>\n",
       "      <td>3736.0300</td>\n",
       "      <td>3791.0900</td>\n",
       "      <td>3720.6900</td>\n",
       "      <td>3745.469500</td>\n",
       "      <td>3735.723080</td>\n",
       "      <td>-31.318831</td>\n",
       "      <td>-38.445955</td>\n",
       "      <td>7.127123</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-20</th>\n",
       "      <td>3787.7300</td>\n",
       "      <td>3786.0300</td>\n",
       "      <td>3799.9000</td>\n",
       "      <td>3778.7300</td>\n",
       "      <td>3745.360500</td>\n",
       "      <td>3740.676120</td>\n",
       "      <td>-23.600853</td>\n",
       "      <td>-35.476934</td>\n",
       "      <td>11.876081</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-21</th>\n",
       "      <td>3781.7600</td>\n",
       "      <td>3778.3100</td>\n",
       "      <td>3792.6000</td>\n",
       "      <td>3775.4500</td>\n",
       "      <td>3743.457000</td>\n",
       "      <td>3744.588870</td>\n",
       "      <td>-17.761287</td>\n",
       "      <td>-31.933805</td>\n",
       "      <td>14.172517</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-22</th>\n",
       "      <td>3793.5100</td>\n",
       "      <td>3793.8600</td>\n",
       "      <td>3797.3300</td>\n",
       "      <td>3771.2000</td>\n",
       "      <td>3740.579000</td>\n",
       "      <td>3749.248025</td>\n",
       "      <td>-12.046399</td>\n",
       "      <td>-27.956324</td>\n",
       "      <td>15.909924</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-23</th>\n",
       "      <td>3820.8600</td>\n",
       "      <td>3796.8800</td>\n",
       "      <td>3829.3600</td>\n",
       "      <td>3788.0300</td>\n",
       "      <td>3738.693500</td>\n",
       "      <td>3756.068213</td>\n",
       "      <td>-5.249876</td>\n",
       "      <td>-23.415034</td>\n",
       "      <td>18.165158</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-26</th>\n",
       "      <td>3765.9100</td>\n",
       "      <td>3756.3600</td>\n",
       "      <td>3778.8700</td>\n",
       "      <td>3753.1600</td>\n",
       "      <td>3734.275500</td>\n",
       "      <td>3757.005526</td>\n",
       "      <td>-4.248612</td>\n",
       "      <td>-19.581750</td>\n",
       "      <td>15.333138</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-27</th>\n",
       "      <td>3816.9500</td>\n",
       "      <td>3791.4600</td>\n",
       "      <td>3848.2400</td>\n",
       "      <td>3790.8700</td>\n",
       "      <td>3731.607000</td>\n",
       "      <td>3762.714524</td>\n",
       "      <td>0.655838</td>\n",
       "      <td>-15.534232</td>\n",
       "      <td>16.190070</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-28</th>\n",
       "      <td>3802.5800</td>\n",
       "      <td>3818.8100</td>\n",
       "      <td>3822.5900</td>\n",
       "      <td>3790.1400</td>\n",
       "      <td>3729.968000</td>\n",
       "      <td>3766.511236</td>\n",
       "      <td>3.344557</td>\n",
       "      <td>-11.758474</td>\n",
       "      <td>15.103031</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-29</th>\n",
       "      <td>3790.1900</td>\n",
       "      <td>3805.4900</td>\n",
       "      <td>3808.6000</td>\n",
       "      <td>3774.4000</td>\n",
       "      <td>3729.304000</td>\n",
       "      <td>3768.766356</td>\n",
       "      <td>4.424612</td>\n",
       "      <td>-8.521857</td>\n",
       "      <td>12.946469</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-08-30</th>\n",
       "      <td>3799.5900</td>\n",
       "      <td>3816.6800</td>\n",
       "      <td>3828.9700</td>\n",
       "      <td>3778.9200</td>\n",
       "      <td>3731.911500</td>\n",
       "      <td>3771.701941</td>\n",
       "      <td>5.970244</td>\n",
       "      <td>-5.623437</td>\n",
       "      <td>11.593681</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-02</th>\n",
       "      <td>3848.3200</td>\n",
       "      <td>3803.6900</td>\n",
       "      <td>3855.7800</td>\n",
       "      <td>3799.8200</td>\n",
       "      <td>3740.543000</td>\n",
       "      <td>3778.998899</td>\n",
       "      <td>11.000466</td>\n",
       "      <td>-2.298656</td>\n",
       "      <td>13.299122</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-03</th>\n",
       "      <td>3853.6100</td>\n",
       "      <td>3852.5800</td>\n",
       "      <td>3856.6800</td>\n",
       "      <td>3833.7600</td>\n",
       "      <td>3751.407000</td>\n",
       "      <td>3786.104718</td>\n",
       "      <td>15.238156</td>\n",
       "      <td>1.208706</td>\n",
       "      <td>14.029450</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-04</th>\n",
       "      <td>3886.0000</td>\n",
       "      <td>3848.6500</td>\n",
       "      <td>3886.0000</td>\n",
       "      <td>3846.4200</td>\n",
       "      <td>3764.635500</td>\n",
       "      <td>3795.618555</td>\n",
       "      <td>20.968446</td>\n",
       "      <td>5.160654</td>\n",
       "      <td>15.807792</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-05</th>\n",
       "      <td>3925.3200</td>\n",
       "      <td>3909.2100</td>\n",
       "      <td>3970.0000</td>\n",
       "      <td>3909.2100</td>\n",
       "      <td>3777.437000</td>\n",
       "      <td>3807.971073</td>\n",
       "      <td>28.355672</td>\n",
       "      <td>9.799658</td>\n",
       "      <td>18.556014</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-06</th>\n",
       "      <td>3948.5100</td>\n",
       "      <td>3946.6900</td>\n",
       "      <td>3948.5400</td>\n",
       "      <td>3922.3400</td>\n",
       "      <td>3793.186000</td>\n",
       "      <td>3821.355733</td>\n",
       "      <td>35.670157</td>\n",
       "      <td>14.973758</td>\n",
       "      <td>20.696400</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-09</th>\n",
       "      <td>3972.9500</td>\n",
       "      <td>3980.9600</td>\n",
       "      <td>3985.2400</td>\n",
       "      <td>3954.8800</td>\n",
       "      <td>3806.878500</td>\n",
       "      <td>3835.793282</td>\n",
       "      <td>42.944012</td>\n",
       "      <td>20.567808</td>\n",
       "      <td>22.376203</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-10</th>\n",
       "      <td>3959.2600</td>\n",
       "      <td>3976.8700</td>\n",
       "      <td>3976.9200</td>\n",
       "      <td>3938.7400</td>\n",
       "      <td>3821.554000</td>\n",
       "      <td>3847.552017</td>\n",
       "      <td>47.061430</td>\n",
       "      <td>25.866533</td>\n",
       "      <td>21.194897</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-11</th>\n",
       "      <td>3930.1000</td>\n",
       "      <td>3969.6800</td>\n",
       "      <td>3971.2200</td>\n",
       "      <td>3922.9500</td>\n",
       "      <td>3833.939000</td>\n",
       "      <td>3855.413730</td>\n",
       "      <td>47.424861</td>\n",
       "      <td>30.178198</td>\n",
       "      <td>17.246663</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-12</th>\n",
       "      <td>3972.3800</td>\n",
       "      <td>3944.6900</td>\n",
       "      <td>3975.9300</td>\n",
       "      <td>3933.4400</td>\n",
       "      <td>3847.858000</td>\n",
       "      <td>3866.553375</td>\n",
       "      <td>50.541910</td>\n",
       "      <td>34.250941</td>\n",
       "      <td>16.290969</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-16</th>\n",
       "      <td>3957.7200</td>\n",
       "      <td>3981.3600</td>\n",
       "      <td>3982.2000</td>\n",
       "      <td>3943.3700</td>\n",
       "      <td>3860.217000</td>\n",
       "      <td>3875.235910</td>\n",
       "      <td>51.238607</td>\n",
       "      <td>37.648474</td>\n",
       "      <td>13.590133</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-17</th>\n",
       "      <td>3891.2200</td>\n",
       "      <td>3947.1600</td>\n",
       "      <td>3947.1600</td>\n",
       "      <td>3879.4900</td>\n",
       "      <td>3865.223500</td>\n",
       "      <td>3876.758205</td>\n",
       "      <td>45.895694</td>\n",
       "      <td>39.297918</td>\n",
       "      <td>6.597776</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-18</th>\n",
       "      <td>3910.0800</td>\n",
       "      <td>3902.9900</td>\n",
       "      <td>3923.1500</td>\n",
       "      <td>3902.5100</td>\n",
       "      <td>3871.341000</td>\n",
       "      <td>3879.931709</td>\n",
       "      <td>42.691124</td>\n",
       "      <td>39.976559</td>\n",
       "      <td>2.714565</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-19</th>\n",
       "      <td>3924.3800</td>\n",
       "      <td>3923.9600</td>\n",
       "      <td>3924.3800</td>\n",
       "      <td>3897.0700</td>\n",
       "      <td>3878.472000</td>\n",
       "      <td>3884.164880</td>\n",
       "      <td>40.834653</td>\n",
       "      <td>40.148178</td>\n",
       "      <td>0.686475</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-20</th>\n",
       "      <td>3935.6500</td>\n",
       "      <td>3933.4600</td>\n",
       "      <td>3942.2200</td>\n",
       "      <td>3921.4100</td>\n",
       "      <td>3885.579000</td>\n",
       "      <td>3889.068224</td>\n",
       "      <td>39.813833</td>\n",
       "      <td>40.081309</td>\n",
       "      <td>-0.267476</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-23</th>\n",
       "      <td>3890.6600</td>\n",
       "      <td>3925.1900</td>\n",
       "      <td>3925.1900</td>\n",
       "      <td>3868.2100</td>\n",
       "      <td>3889.069000</td>\n",
       "      <td>3889.219822</td>\n",
       "      <td>34.971380</td>\n",
       "      <td>39.059323</td>\n",
       "      <td>-4.087943</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-24</th>\n",
       "      <td>3901.0800</td>\n",
       "      <td>3895.8700</td>\n",
       "      <td>3927.0100</td>\n",
       "      <td>3886.1400</td>\n",
       "      <td>3895.827500</td>\n",
       "      <td>3890.349363</td>\n",
       "      <td>31.610126</td>\n",
       "      <td>37.569484</td>\n",
       "      <td>-5.959358</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-25</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3887.5548</td>\n",
       "      <td>3889.8390</td>\n",
       "      <td>3867.2277</td>\n",
       "      <td>3898.529185</td>\n",
       "      <td>3888.505014</td>\n",
       "      <td>26.215591</td>\n",
       "      <td>35.298705</td>\n",
       "      <td>-9.083114</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-26</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3901.949370</td>\n",
       "      <td>3886.836317</td>\n",
       "      <td>21.690351</td>\n",
       "      <td>32.577034</td>\n",
       "      <td>-10.886684</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-27</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3905.989055</td>\n",
       "      <td>3885.326544</td>\n",
       "      <td>17.897751</td>\n",
       "      <td>29.641178</td>\n",
       "      <td>-11.743427</td>\n",
       "    </tr>\n",
       "    <tr>\n",
       "      <th>2019-09-30</th>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3870.9837</td>\n",
       "      <td>3909.558740</td>\n",
       "      <td>3883.960559</td>\n",
       "      <td>14.722378</td>\n",
       "      <td>26.657418</td>\n",
       "      <td>-11.935040</td>\n",
       "    </tr>\n",
       "  </tbody>\n",
       "</table>\n",
       "<p>65 rows × 9 columns</p>\n",
       "</div>"
      ],
      "text/plain": [
       "                close       open       high        low          SMA  \\\n",
       "2019-07-01  3935.8100  3899.3300  3936.6700  3886.9100          NaN   \n",
       "2019-07-02  3937.1700  3931.0500  3942.4300  3918.9400          NaN   \n",
       "2019-07-03  3893.5300  3927.4400  3927.4400  3878.8400          NaN   \n",
       "2019-07-04  3873.1000  3895.2000  3906.8900  3854.6900          NaN   \n",
       "2019-07-05  3893.2000  3875.3700  3900.3100  3857.9300          NaN   \n",
       "2019-07-08  3802.7900  3875.7500  3875.7500  3775.0300          NaN   \n",
       "2019-07-09  3793.1300  3798.1000  3811.1000  3774.7600          NaN   \n",
       "2019-07-10  3786.7400  3807.9500  3810.4000  3774.2300          NaN   \n",
       "2019-07-11  3785.2200  3806.1900  3830.7400  3774.4100          NaN   \n",
       "2019-07-12  3808.7300  3783.0700  3820.2400  3774.5200          NaN   \n",
       "2019-07-15  3824.1900  3792.6400  3844.8700  3745.8500          NaN   \n",
       "2019-07-16  3806.8400  3819.2500  3828.3300  3799.8700          NaN   \n",
       "2019-07-17  3804.6400  3800.1100  3820.2700  3787.9000          NaN   \n",
       "2019-07-18  3768.4000  3793.1900  3793.3900  3768.0000          NaN   \n",
       "2019-07-19  3807.9600  3787.5100  3828.1500  3787.5100          NaN   \n",
       "2019-07-22  3781.6800  3813.5000  3816.5400  3765.4400          NaN   \n",
       "2019-07-23  3789.9100  3783.5400  3792.9600  3768.7600          NaN   \n",
       "2019-07-24  3819.8300  3803.5900  3840.0600  3803.5700          NaN   \n",
       "2019-07-25  3851.0700  3821.3900  3851.0700  3812.9500          NaN   \n",
       "2019-07-26  3858.5700  3835.2300  3863.5900  3832.5200  3831.125500   \n",
       "2019-07-29  3854.2700  3857.9400  3862.7500  3842.4300  3827.048500   \n",
       "2019-07-30  3870.3200  3861.5700  3890.7300  3861.5700  3823.706000   \n",
       "2019-07-31  3835.3600  3856.7400  3856.7400  3830.0900  3820.797500   \n",
       "2019-08-01  3803.4700  3819.3200  3831.2600  3791.5500  3817.316000   \n",
       "2019-08-02  3747.4400  3729.1300  3754.5300  3720.0600  3810.028000   \n",
       "2019-08-05  3675.6900  3724.4100  3739.5000  3675.6900  3803.673000   \n",
       "2019-08-06  3636.3300  3609.1100  3649.9000  3575.8600  3795.833000   \n",
       "2019-08-07  3621.4300  3654.6300  3659.0800  3621.4300  3787.567500   \n",
       "2019-08-08  3669.2900  3651.3600  3675.4600  3646.9400  3781.771000   \n",
       "2019-08-09  3633.5300  3686.7500  3689.1800  3628.1200  3773.011000   \n",
       "...               ...        ...        ...        ...          ...   \n",
       "2019-08-19  3791.0900  3736.0300  3791.0900  3720.6900  3745.469500   \n",
       "2019-08-20  3787.7300  3786.0300  3799.9000  3778.7300  3745.360500   \n",
       "2019-08-21  3781.7600  3778.3100  3792.6000  3775.4500  3743.457000   \n",
       "2019-08-22  3793.5100  3793.8600  3797.3300  3771.2000  3740.579000   \n",
       "2019-08-23  3820.8600  3796.8800  3829.3600  3788.0300  3738.693500   \n",
       "2019-08-26  3765.9100  3756.3600  3778.8700  3753.1600  3734.275500   \n",
       "2019-08-27  3816.9500  3791.4600  3848.2400  3790.8700  3731.607000   \n",
       "2019-08-28  3802.5800  3818.8100  3822.5900  3790.1400  3729.968000   \n",
       "2019-08-29  3790.1900  3805.4900  3808.6000  3774.4000  3729.304000   \n",
       "2019-08-30  3799.5900  3816.6800  3828.9700  3778.9200  3731.911500   \n",
       "2019-09-02  3848.3200  3803.6900  3855.7800  3799.8200  3740.543000   \n",
       "2019-09-03  3853.6100  3852.5800  3856.6800  3833.7600  3751.407000   \n",
       "2019-09-04  3886.0000  3848.6500  3886.0000  3846.4200  3764.635500   \n",
       "2019-09-05  3925.3200  3909.2100  3970.0000  3909.2100  3777.437000   \n",
       "2019-09-06  3948.5100  3946.6900  3948.5400  3922.3400  3793.186000   \n",
       "2019-09-09  3972.9500  3980.9600  3985.2400  3954.8800  3806.878500   \n",
       "2019-09-10  3959.2600  3976.8700  3976.9200  3938.7400  3821.554000   \n",
       "2019-09-11  3930.1000  3969.6800  3971.2200  3922.9500  3833.939000   \n",
       "2019-09-12  3972.3800  3944.6900  3975.9300  3933.4400  3847.858000   \n",
       "2019-09-16  3957.7200  3981.3600  3982.2000  3943.3700  3860.217000   \n",
       "2019-09-17  3891.2200  3947.1600  3947.1600  3879.4900  3865.223500   \n",
       "2019-09-18  3910.0800  3902.9900  3923.1500  3902.5100  3871.341000   \n",
       "2019-09-19  3924.3800  3923.9600  3924.3800  3897.0700  3878.472000   \n",
       "2019-09-20  3935.6500  3933.4600  3942.2200  3921.4100  3885.579000   \n",
       "2019-09-23  3890.6600  3925.1900  3925.1900  3868.2100  3889.069000   \n",
       "2019-09-24  3901.0800  3895.8700  3927.0100  3886.1400  3895.827500   \n",
       "2019-09-25  3870.9837  3887.5548  3889.8390  3867.2277  3898.529185   \n",
       "2019-09-26  3870.9837  3870.9837  3870.9837  3870.9837  3901.949370   \n",
       "2019-09-27  3870.9837  3870.9837  3870.9837  3870.9837  3905.989055   \n",
       "2019-09-30  3870.9837  3870.9837  3870.9837  3870.9837  3909.558740   \n",
       "\n",
       "                    EMA       diff        dea       macd  \n",
       "2019-07-01          NaN        NaN        NaN        NaN  \n",
       "2019-07-02          NaN        NaN        NaN        NaN  \n",
       "2019-07-03          NaN        NaN        NaN        NaN  \n",
       "2019-07-04          NaN        NaN        NaN        NaN  \n",
       "2019-07-05          NaN        NaN        NaN        NaN  \n",
       "2019-07-08          NaN        NaN        NaN        NaN  \n",
       "2019-07-09          NaN        NaN        NaN        NaN  \n",
       "2019-07-10          NaN        NaN        NaN        NaN  \n",
       "2019-07-11          NaN        NaN        NaN        NaN  \n",
       "2019-07-12          NaN        NaN        NaN        NaN  \n",
       "2019-07-15          NaN        NaN        NaN        NaN  \n",
       "2019-07-16          NaN        NaN        NaN        NaN  \n",
       "2019-07-17          NaN        NaN        NaN        NaN  \n",
       "2019-07-18          NaN        NaN        NaN        NaN  \n",
       "2019-07-19          NaN        NaN        NaN        NaN  \n",
       "2019-07-22          NaN        NaN        NaN        NaN  \n",
       "2019-07-23          NaN        NaN        NaN        NaN  \n",
       "2019-07-24          NaN        NaN        NaN        NaN  \n",
       "2019-07-25          NaN        NaN        NaN        NaN  \n",
       "2019-07-26  3831.125500        NaN        NaN        NaN  \n",
       "2019-07-29  3833.329738        NaN        NaN        NaN  \n",
       "2019-07-30  3836.852620        NaN        NaN        NaN  \n",
       "2019-07-31  3836.710466        NaN        NaN        NaN  \n",
       "2019-08-01  3833.544707        NaN        NaN        NaN  \n",
       "2019-08-02  3825.344259        NaN        NaN        NaN  \n",
       "2019-08-05  3811.091472        NaN        NaN        NaN  \n",
       "2019-08-06  3794.447523        NaN        NaN        NaN  \n",
       "2019-08-07  3777.969663        NaN        NaN        NaN  \n",
       "2019-08-08  3767.619219        NaN        NaN        NaN  \n",
       "2019-08-09  3754.848817        NaN        NaN        NaN  \n",
       "...                 ...        ...        ...        ...  \n",
       "2019-08-19  3735.723080 -31.318831 -38.445955   7.127123  \n",
       "2019-08-20  3740.676120 -23.600853 -35.476934  11.876081  \n",
       "2019-08-21  3744.588870 -17.761287 -31.933805  14.172517  \n",
       "2019-08-22  3749.248025 -12.046399 -27.956324  15.909924  \n",
       "2019-08-23  3756.068213  -5.249876 -23.415034  18.165158  \n",
       "2019-08-26  3757.005526  -4.248612 -19.581750  15.333138  \n",
       "2019-08-27  3762.714524   0.655838 -15.534232  16.190070  \n",
       "2019-08-28  3766.511236   3.344557 -11.758474  15.103031  \n",
       "2019-08-29  3768.766356   4.424612  -8.521857  12.946469  \n",
       "2019-08-30  3771.701941   5.970244  -5.623437  11.593681  \n",
       "2019-09-02  3778.998899  11.000466  -2.298656  13.299122  \n",
       "2019-09-03  3786.104718  15.238156   1.208706  14.029450  \n",
       "2019-09-04  3795.618555  20.968446   5.160654  15.807792  \n",
       "2019-09-05  3807.971073  28.355672   9.799658  18.556014  \n",
       "2019-09-06  3821.355733  35.670157  14.973758  20.696400  \n",
       "2019-09-09  3835.793282  42.944012  20.567808  22.376203  \n",
       "2019-09-10  3847.552017  47.061430  25.866533  21.194897  \n",
       "2019-09-11  3855.413730  47.424861  30.178198  17.246663  \n",
       "2019-09-12  3866.553375  50.541910  34.250941  16.290969  \n",
       "2019-09-16  3875.235910  51.238607  37.648474  13.590133  \n",
       "2019-09-17  3876.758205  45.895694  39.297918   6.597776  \n",
       "2019-09-18  3879.931709  42.691124  39.976559   2.714565  \n",
       "2019-09-19  3884.164880  40.834653  40.148178   0.686475  \n",
       "2019-09-20  3889.068224  39.813833  40.081309  -0.267476  \n",
       "2019-09-23  3889.219822  34.971380  39.059323  -4.087943  \n",
       "2019-09-24  3890.349363  31.610126  37.569484  -5.959358  \n",
       "2019-09-25  3888.505014  26.215591  35.298705  -9.083114  \n",
       "2019-09-26  3886.836317  21.690351  32.577034 -10.886684  \n",
       "2019-09-27  3885.326544  17.897751  29.641178 -11.743427  \n",
       "2019-09-30  3883.960559  14.722378  26.657418 -11.935040  \n",
       "\n",
       "[65 rows x 9 columns]"
      ]
     },
     "execution_count": 156,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "df['diff'], df['dea'], df['macd'] = ta.MACD(df['close'], fastperiod=12, slowperiod=26, signalperiod=9)\n",
    "df"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 157,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "<matplotlib.axes._subplots.AxesSubplot at 0x1459a9cfe48>"
      ]
     },
     "execution_count": 157,
     "metadata": {},
     "output_type": "execute_result"
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<Figure size 432x288 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "df[['diff','dea','macd']].plot()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.7.0"
  },
  "pycharm": {
   "stem_cell": {
    "cell_type": "raw",
    "metadata": {
     "collapsed": false
    },
    "source": []
   }
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
